REST API
#
Основные#
Включение генерации транспорта RESTПо умолчанию Swipe генерирует REST транспорт.
Для генерации достаточно добавить такие настройки:
// +build swipe
package example
import ( "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( gokit.Interface((*controller.ExampleController)(nil), "example"),
gokit.HTTPServer(), )}
Swipe сгенерирует методы транспорта для всех экспортируемых методов.
info
Swipe автоматически определяет метод HTTP.
info
Если параметры метода не перенаправлены на параметры запроса, заголовки или в путь REST то будет использоваться метод POST иначе GET.
Swipe может генерировать документацию Openapi (Swagger) подробно про это рассказано в разделе Openapi (Swagger) документации
#
НастройкиВы можете управлять генерацией методов, например исключить метод из генерации в транспорте, перенаправить параметры на параметры запроса, заголовки или путь REST, изменить HTTP метод.
#
Изменение настроек методаДля того чтобы изменить настройки метода, необходимо использовать функцию MethodOptions
// +build swipe
package example
import ( "http" "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( gokit.Interface((*controller.ExampleController)(nil), "example"), gokit.HTTPServer(), gokit.MethodOptions(controller.ExampleController.Get, gokit.RESTMethod(http.MethodPost), // у метода Get будет HTTP метод POST. ), )}
#
Изменение настроек по умолчанию для всех методовДля того чтобы изменить настройки, по умолчанию для всех методов, необходимо использовать функцию MethodDefaultOptions
// +build swipe
package example
import ( "http" "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit" )
func swipe() { gokit.Gokit( gokit.Interface((*controller.ExampleController)(nil), "example"), gokit.HTTPServer(), gokit.MethodDefaultOptions( gokit.RESTMethod(http.MethodPost), // у всех методов будет HTTP метод POST. ), )}
#
Изменение HTTP методаRESTMethod
устанавливает HTTP метод.
// +build swipe
package example
import ( "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( gokit.Interface((*controller.ExampleController)(nil), "example"), gokit.HTTPServer(), gokit.MethodOptions(controller.ExampleController.Get, gokit.RESTMethod(http.MethodPost), // у всех метода Get будет HTTP метод POST. ), )}
#
Изменение HTTP путиRESTPath
устанавливает HTTP путь, по умолчанию используется имя метода интерфейса в нижнем регистре, например:
- для Get будет путь
/get
- для GetByID будет путь
/getbyid
// +build swipe
package example
import ( "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( gokit.Interface((*controller.ExampleController)(nil), "example"), gokit.HTTPServer(), gokit.MethodOptions(controller.ExampleController.Get, gokit.RESTPath("/users"), // у метода Get будет путь /users. ), )}
#
Привязки значений из HTTP заголовка к параметру метода.RESTHeaderVars
используется для привязки значений из HTTP заголовка к параметру метода.
Например, если необходимо использовать заголовок X-Request-ID
в параметре метода requestID
:
info
Параметры указываются в виде массива, где пара значений представляет собой параметр метода и имя HTTP заголовка.
// +build swipe
package example
import ( "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( gokit.Interface((*controller.ExampleController)(nil), "example"), gokit.HTTPServer(), gokit.MethodOptions(controller.ExampleController.Get, gokit.RESTHeaderVars([]string{"requestID", "X-Request-ID"}), ) )}
#
Привязка значений из параметров HTTP запроса к параметру методаRESTQueryVars
используется для привязки значений из параметров HTTP запроса (query params) к параметру метода.
Например, если необходимо использовать параметр запроса sort
в параметре метода sortBy
:
info
Параметры указываются в виде массива, где пара значений представляет собой имя параметра метода и параметр HTTP запроса ([]string{"sortBy", "sort"}).
// +build swipe
package example
import ( "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( gokit.Interface((*controller.ExampleController)(nil), "example"), gokit.HTTPServer(), gokit.MethodOptions(controller.ExampleController.Get, gokit.RESTHeaderVars([]string{"sortBy", "sort"}), ), )}
#
Оборачивание REST ответа в объектRESTWrapResponse
используется для того, чтобы обернуть ответ в объект.
info
Можно указать путь в виде json path для того, чтобы сделать вложенность (a.b.c => {"a": {"b": {"c": "<you value>"}}}
).
Например, у вас есть метод интерфейса Get() (User, error)
и вам необходимо чтобы
содержимое полей структуры User
было внутри поля data
// +build swipe
package example
import ( "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( Interface((*controller.ExampleController)(nil), "example"), HTTPServer(), MethodOptions(controller.ExampleController.Get, RESTWrapResponse("data"), ), )}
В ответ будет JSON такого вида:
{ "data": { "firstName": "", "lastName": "" }}
#
Загрузка файлаRESTMultipart
используется для того, чтобы использовать метод для загрузки файла средствами HTTP multipart form.
В параметре указывается максимальный размер передаваемых данных в байтах.
Тип параметра, который будет получать файл должен имплементировать интерфейс:
interface { Name() string io.ReadCloser}
// +build swipe
package example
import ( "github.com/example/app/pkg/controller" "github.com/example/app/pkg/swipe/gokit")
func swipe() { gokit.Gokit( Interface((*controller.ExampleController)(nil), "example"), HTTPServer(), MethodOptions(controller.ExampleController.Upload, gokit.RESTMultipart(134217728), ), )}