수색…


하인

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]

이는 /usersSortBy 유형의 쿼리 매개 변수 sortby 를 사용하여 /usersGET 요청에 노출하고 응답에 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 함수가 사용됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow