syntax = "v1" info ( title: "User service reference" version: "1.0.0" ) type ( UserResp { ID int64 `json:"id"` Name string `json:"name"` Email string `json:"email"` CreatedAt string `json:"createdAt"` UpdatedAt string `json:"updatedAt"` } CreateUserReq { Name string `json:"name" binding:"required,max=100"` Email string `json:"email" binding:"required,email,max=254"` } UserIDReq { ID int64 `path:"id,range=[1:9007199254740991]"` } UpdateUserReq { ID int64 `path:"id,range=[1:9007199254740991]"` Name string `json:"name" binding:"required,max=100"` Email string `json:"email" binding:"required,email,max=254"` } ListUsersReq { Page int `form:"page,default=1,range=[1:1000000]"` PageSize int `form:"pageSize,default=20,range=[1:100]"` } UserPageResp { Items []UserResp `json:"items"` Total int `json:"total"` Page int `json:"page"` PageSize int `json:"pageSize"` } ExportResp { DownloadURL string `json:"downloadUrl"` } ) @server ( group: user prefix: /api/v1 middleware: Auth ) service user-api { @handler createUser @status 201 post /users (CreateUserReq) returns (UserResp) @handler getUser get /users/:id (UserIDReq) returns (UserResp) @handler listUsers get /users (ListUsersReq) returns (UserPageResp) @handler updateUser put /users/:id (UpdateUserReq) returns (UserResp) @handler deleteUser delete /users/:id (UserIDReq) @doc "Export one user as a private text object with a short-lived download link" @handler exportUser post /users/:id/export (UserIDReq) returns (ExportResp) }