콘텐츠로 이동

API DSL 참조

syntax = "v1" // 예시입니다
info ( // 예시입니다
title: "User API"
version: "1.0"
)
import "shared.api" // 예시입니다
type (...) // 예시입니다
service name-api { // 예시입니다
@server (...)
@handler HandlerName
method /path (RequestType) returns (ResponseType)
}
type (
LoginReq {
Username string `json:"username"`
Password string `json:"password"`
}
LoginResp {
Token string `json:"token"`
Expires int64 `json:"expires"`
}
// 경로 매개변수
UserReq {
Id int64 `path:"id"`
}
// 쿼리 매개변수
SearchReq {
Keyword string `form:"keyword"`
Page int `form:"page,default=1"`
}
)
TagSource예제
jsonRequest/response 본문 (POST/PUT)json:"username"
pathURL 경로 매개변수path:"id"
formURL query string (GET)form:"page,default=1"
headerHTTP Request 헤더header:"Authorization"
type SearchReq {
Keyword string `form:"keyword"`
Page int `form:"page,optional"`
Size int `form:"size,default=20"`
}
service user-api {
@server (
jwt: Auth // JWT 인증 설정
middleware: AccessLog,Cors // 예시입니다
prefix: /v1 // URL 접두사
timeout: 3s // 예시입니다
)
@handler Login
post /user/login (LoginReq) returns (LoginResp)
@handler GetUser
get /user/:id (UserReq) returns (UserResp)
@handler DeleteUser
delete /user/:id (UserReq) // 예시입니다
}

get / post / put / patch / delete / head

Group 라우트 통해 인증 requirement:

service user-api {
// 공개 라우트
@handler Login
post /user/login (LoginReq) returns (LoginResp)
}
service user-api {
@server (
jwt: Auth
)
// JWT가 필요한 비공개 라우트
@handler GetProfile
get /user/profile () returns (ProfileResp)
}

Split 큰 APIs 전반에 파일:

main.api
syntax = "v1"
import (
"user.api"
"order.api"
)
syntax = "v1"
type (
RegisterReq {
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
}
RegisterResp {
Id int64 `json:"id"`
}
UserInfoReq {
Id int64 `path:"id"`
}
UserInfoResp {
Id int64 `json:"id"`
Username string `json:"username"`
}
)
service user-api {
@handler Register
post /user/register (RegisterReq) returns (RegisterResp)
}
service user-api {
@server (
jwt: Auth
prefix: /api/v1
)
@handler GetUserInfo
get /user/:id (UserInfoReq) returns (UserInfoResp)
}

생성:

Terminal window
goctl api go -api user.api -dir .