Перейти к основному содержимому
Version: Next

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": ""  }}