- Первоначально этот пост был размещен на сайте http: // swag ger .io (30.07.2015).
Я использовал Play Framework в качестве молниеносного REST-фреймворка на основе Java для нескольких проектов. Позже я был рад найти Swagger и работал над тем, чтобы интегрировать его в несколько проектов. Когда я боролся с этим в первый раз, я подумал, что было бы полезно поделиться своим опытом и создать статью с практическими рекомендациями, описывающую шаги для быстрого достижения успеха.
Чтобы упростить ситуацию, я начал с существующего проекта Play Framework, Java, JPA, REST, созданного Джеймсом Уордом . Проект Джеймса находится на GitHub, поэтому вам стоит потянуть его, прежде чем начать с этим практическим руководством.
Инструкции
- Сначала добавьте зависимости в ваш build.sbt. Мне удалось решить проблему с зависимостями с версией Play Framework 2.3.0, используемой в примере проекта и Swagger-Core, обратившись к выпуску GitHub 55o: https: // github .com / s w a г г е р — р я / с ш а е г е р — с Н / I S S е е / 550 .
123
"com.wordnik"
%%
"swagger-play2"
%
"1.3.12"
exclude(
"org.reflections"
,
"reflections"
),
"org.reflections"
%
"reflections"
%
"0.9.8"
notTransitive (),
"org.webjars"
%
"swagger-ui"
%
"2.1.8-M1"
- Добавьте это в конфигурационное приложение.conf:
api.version="1.0" swagger.api.basepath="http://localhost:9000"
- Добавьте маршруты api-docs в файл маршрутов:
010203040506070809101112
GET / controllers.Assets.at(path=
"/public"
,
file
=
"index.html"
)
GET
/api-docs
controllers.ApiHelpController.getResources
POST
/login
controllers.SecurityController.login() POST
/logout
controllers.SecurityController.
logout
()
GET
/api-docs/api/todos
controllers.ApiHelpController.getResource(path =
"/api/todos"
)
GET
/todos
controllers.TodoController.getAllTodos()
POST
/todos
controllers.TodoController.createTodo()
# Map static resources from the /public folder to the /assets URL path
GET
/assets/
*
file
controllers.Assets.at(path=
"/public"
,
file
)
- Добавьте аннотации Swagger в ToDoController (@Api):
123
@Api(value =
"/api/todos"
, description =
"Operations with Todos"
)
@Security.Authenticated(Secured.class)
public class TodoController extends Controller {
Затем аннотации для методов GET и POST:
010203040506070809101112131415161718192021222324252627282930313233343536373839404142@ApiOperation(value =
"get All Todos"
,
notes =
"Returns List of all Todos"
,
response = Todo.class,
httpMethod =
"GET"
)
public static Result getAllTodos() {
return
ok(toJson(models.Todo.findByUser(SecurityController.getUser())));
}
@ApiOperation(
nickname =
"createTodo"
,
value =
"Create Todo"
,
notes =
"Create Todo record"
,
httpMethod =
"POST"
,
response = Todo.class
)
@ApiImplicitParams(
{
@ApiImplicitParam(
name =
"body"
,
dataType =
"Todo"
,
required =
true
,
paramType =
"body"
,
value =
"Todo"
)
}
)
@ApiResponses(
value = {
@com.wordnik.swagger.annotations.ApiResponse(code = 400, message =
"Json Processing Exception"
)
}
)
public static Result createTodo() {
Form<models.Todo> form = Form.form(models.Todo.class).bindFromRequest();
if
(form.hasErrors()) {
return
badRequest(form.errorsAsJson());
}
else
{
models.Todo todo = form.get();
todo.user = SecurityController.getUser();
todo.save();
return
ok(toJson(todo));
}
}
- Запустите приложение и перейдите по этому URL в вашем браузере:
http://localhost:9000/assets/lib/swagger-ui/index.html?/url=http://localhost:9000/api-docs
Исходный код
Как уже упоминалось в начале, я начал с игры Джеймса Уорда, обеспечивающей безопасность отдыха на github, и сделал эти изменения на своей вилке. Для всех, кто заинтересован, вот исходный код:
ПРИМЕЧАНИЕ: тем временем, Джеймс Уорд одобрил мой запрос на добавление, чтобы добавить эти изменения в свой проект — GitHub, так что вы должны получить его
Ссылка: | Легко документировать свой REST API Play Framework с помощью Swagger от нашего партнера по JCG Брайана Портера в блоге Poornerd . |