REST API
#
Основные#
Включение генерации транспорта RESTПо умолчанию Swipe генерирует REST транспорт.
Для генерации достаточно добавить такие настройки:
package example
import ( "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), ), )}
Swipe сгенерирует методы транспорта для всех экспортируемых методов.
info
Swipe автоматически определяет метод HTTP, если параметры метода не перенаправлены на параметры запроса, заголовки или в путь REST то будет использоваться метод POST иначе GET.
Swipe может генерировать документацию Openapi (Swagger) подробно про это рассказано в разделе Openapi (Swagger) документации
#
НастройкиВы можете управлять генерацией методов, например исключить метод из генерации в транспорте, перенаправить параметры на параметры запроса, заголовки или путь REST, изменить HTTP метод.
#
Изменение настроек методаДля того, чтобы изменить настройки метода необходимо, использовать функцию MethodOptions
package example
import ( "http" "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), MethodOptions(controller.UserController.Get, RESTMethod(http.MethodPost), // у всех метода Get будет HTTP метод POST. ) ), )}
#
Изменение настроек по умолчанию для всех методовДля того, чтобы изменить настройки по умолчанию для всех методов, необходимо использовать функцию MethodDefaultOptions
package example
import ( "http" "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), MethodDefaultOptions( RESTMethod(http.MethodPost), // у всех методов будет HTTP метод POST. ) ), )}
#
Изменение HTTP методаУстанавливает HTTP метод.
package example
import ( "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), MethodOptions(controller.UserController.Get, RESTMethod(http.MethodPost), // у всех метода Get будет HTTP метод POST. ) ), )}
#
Изменение HTTP путиУстанавливает HTTP путь, по умолчанию используется имя метода интерфейса в нижнем регистре, например:
- для Get будет путь
/get
- для GetByID будет путь
/getbyid
package example
import ( "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), MethodOptions(controller.UserController.Get, RESTPath("/users"), // у метода Get будет путь /users. ) ), )}
#
Привязки значений из HTTP заголовка к параметру метода.Используется для привязки значений из HTTP заголовка к параметру метода.
Например если необходимо использовать заголовок X-Request-ID
в параметре метода requestID
:
info
Параметры указываются в виде массива, где пара значений представляет собой имя HTTP заголовка и параметра метода.
package example
import ( "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), MethodOptions(controller.UserController.Get, RESTHeaderVars([]string{"X-Request-ID", "requestID"}), ) ), )}
#
Привязка значений из параметров HTTP запроса к параметру методаИспользуется для привязки значений из параметров HTTP запроса к параметру метода.
Например если необходимо использовать параметр запроса sort
в параметре метода sort
:
info
Параметры указываются в виде массива, где пара значений представляет собой имя параметра HTTP запроса и метода.
package example
import ( "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), MethodOptions(controller.UserController.Get, RESTHeaderVars([]string{"X-Request-ID", "requestID"}), ) ), )}
#
Оборачивание REST ответа в объектИспользуется для того, чтобы обернуть ответ в объект.
Например у вас есть метод интерфейса Get() (User, error)
и вам необходимо чтобы
содержимое полей структуры User
было внутри поля data
package example
import ( "github.com/example/app/pkg/controller" . "github.com/swipe-io/swipe/v2")
func Swipe() { Build( Service( Interface((*controller.UserController)(nil), ""), HTTPServer(), MethodOptions(controller.UserController.Get, RESTWrapResponse("data"), ) ), )}
В ответ будет JSON такого вида:
{ "data": { "firstName": "", "lastName": "" }}