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-postgres
PostgreSQLを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
関数が使用されます。