Haskell Language
웹 개발
수색…
하인
Servant 는 유형 수준에서 API를 선언하고 다음을 수행하는 라이브러리입니다.
- 쓰기 서버 (서번트의이 부분은 웹 프레임 워크로 간주 될 수 있음)
- (haskell에서) 클라이언트 함수를 얻는다.
- 다른 프로그래밍 언어 용 클라이언트 함수 생성,
- 웹 애플리케이션 용 문서 생성
- 그리고 더...
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
가 SortBy
유형의 쿼리 매개 변수 sortby
를 사용하여 /users
를 GET
요청에 노출하고 응답에 User
유형의 JSON을 반환하고자 함을 나타냅니다.
이제 핸들러를 정의 할 수 있습니다.
-- 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
Stack 에는 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
. SQlite를 DB 엔진으로 사용합니다.
yesod-bin
패키지는 yesod
실행 파일을 제공하며 개발 서버를 실행하는 데 사용할 수 있습니다. 응용 프로그램을 직접 실행할 수도 있으므로 yesod
도구는 선택 사항입니다.
Application.hs
에는 처리기간에 요청을 전달하는 코드가 들어 있습니다. 또한 데이터베이스 및 로깅 설정을 사용하는 경우이를 설정합니다.
Foundation.hs
는 모든 핸들러에 대한 환경으로 볼 수있는 App
유형을 정의합니다. HandlerT
모나드에서 getYesod
함수를 사용 getYesod
값을 얻을 수 있습니다.
Import.hs
는 일반적으로 사용되는 항목을 다시 내보내기 Import.hs
는 모듈입니다.
Model.hs
는 DB 상호 작용에 사용되는 코드와 데이터 형식을 생성하는 Template Haskell을 포함합니다. DB를 사용하는 경우에만 표시됩니다.
config/models
는 DB 스키마를 정의하는 곳입니다. Model.hs
사용됩니다.
config/routes
는 웹 애플리케이션의 URI를 정의합니다. 라우트의 각 HTTP 메소드에 대해 {method}{RouteR}
핸들러를 작성해야합니다.
static/
디렉토리는 사이트의 정적 리소스를 포함합니다. 이것들은 Settings/StaticFiles.hs
모듈에 의해 바이너리로 컴파일됩니다.
templates/
디렉토리에는 요청을 처리 할 때 사용되는 셰익스피어 템플릿이 들어 있습니다.
마지막으로, Handler/
디렉토리는 라우트에 대한 핸들러를 정의하는 모듈을 포함합니다.
각 핸들러는 IO를 기반으로 한 HandlerT
모나드 액션입니다. 요청 매개 변수, 본문 및 기타 정보를 검사하고, runDB
DB에 쿼리하고, 임의 IO를 수행하고, 다양한 유형의 내용을 사용자에게 반환 할 수 있습니다. HTML을 제공하기 위해 셰익스피어 템플릿의 깔끔한 구성을 가능하게하는 defaultLayout
함수가 사용됩니다.