Haskell Language
ウェブ開発
サーチ…
サーバント
Servantは、タイプレベルでAPIを宣言し、次に:
- (サーバントのこの部分はWebフレームワークと見なすことができます)
- クライアント関数を取得する(haskellで)、
- 他のプログラミング言語用のクライアント関数を生成し、
- Webアプリケーションのドキュメントを生成する
- もっと...
Servantには簡潔で強力なAPIがあります。簡単なAPIは、ほんの数行のコードで書くことができます:
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
import Data.Text
import Data.Aeson.Types
import GHC.Generics
import Servant.API
data SortBy = Age | Name
data User = User {
name :: String,
age :: Int
} deriving (Eq, Show, Generic)
instance ToJSON User -- automatically convert User to JSON
APIを宣言できます:
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
これは私たちが公開したいと述べている/usersするGETクエリのparamと要求sortbyタイプのSortByし、型のJSONを返すUser応答を。
これでハンドラを定義できます:
-- This is where we'd return our user data, or e.g. do a database lookup
server :: Server UserAPI
server = return [User "Alex" 31]
userAPI :: Proxy UserAPI
userAPI = Proxy
app1 :: Application
app1 = serve userAPI server
また、ポート8081でリッスンし、ユーザーAPIを提供する主な方法は次のとおりです。
main :: IO ()
main = run 8081 app1
スタックには、Servantで基本APIを生成するためのテンプレートがあります。これは、非常に迅速に起動して実行するのに便利です。
Yesod
Yesodプロジェクトは、次のテンプレートを使用してstack newで作成できます。
-
yesod-minimal。最も簡単なYesod足場が可能です。 -
yesod-mongo。 MongoDBをDBエンジンとして使用します。 -
yesod-mysql。 MySQLをDBエンジンとして使用します。 -
yesod-postgresPostgreSQLをDBエンジンとして使用します。 -
yesod-postgres-fay。 PostgreSQLをDBエンジンとして使用します。フロントエンドにFay言語を使用します。 -
yesod-simple。データベースが必要ない場合は、使用する推奨テンプレート。 -
yesod-sqlite。 DBエンジンとしてSQliteを使用します。
yesod-binパッケージは、開発サーバーを実行するために使用できるyesod実行可能ファイルを提供します。アプリケーションを直接実行することもできますので、 yesodツールはオプションです。
Application.hsは、ハンドラー間で要求をディスパッチするコードが含まれています。また、データベースとロギング設定を使用している場合は設定します。
Foundation.hsは、すべてのハンドラの環境と見ることができるAppタイプを定義します。 HandlerTモナドでは、 getYesod関数を使ってこの値を得ることができます。
Import.hsは、一般的に使用されているものを再エクスポートするモジュールです。
Model.hsは、DB相互作用に使用されるコードとデータ型を生成するTemplate Haskellが含まれています。 DBを使用している場合のみ表示されます。
config/modelsは、DBスキーマを定義する場所です。 Model.hs使用されModel.hs 。
config/routesは、WebアプリケーションのURIを定義します。ルートの各HTTPメソッドに対して、 {method}{RouteR}という名前のハンドラを作成する必要があります。
static/ディレクトリには、サイトの静的リソースが含まれています。これらは、 Settings/StaticFiles.hsモジュールによってバイナリにコンパイルされます。
templates/ディレクトリには、要求を処理するときに使用されるShakespeareテンプレートが含まれています。
最後に、 Handler/ディレクトリには、ルートのハンドラを定義するモジュールが含まれています。
各ハンドラはIOに基づくHandlerTモナドアクションです。リクエストパラメータ、ボディとその他の情報をrunDB 、 runDBでDBにクエリを行い、任意のIOを実行し、様々なタイプのコンテンツをユーザに返すことができます。 HTMLを提供するために、 defaultLayoutテンプレートのきれいな合成を可能にするdefaultLayout関数が使用されます。