1

Мне было интересно, если бы кто-то делал это раньше, когда они генерируют документы API, используя интерфейс Swagger для API, также не созданный Swagger. Вот что простой пример шахты выглядит следующим образом:Интерфейс Swagger UI для Rails API с помощью Serializer ActiveModel

class Api::V1::UsersController < Api::V1::BaseController 
    swagger_controller :users, 'Users' 

    swagger_api :show do 
    summary 'Returns a user' 
    param :path, :id, :integer, :optional, "User Id" 
    notes '/api/v1/users/:id' 
    response :ok, "Success", :Users 
    response :unauthorized 
    response :not_acceptable 
    response :not_found 
    end 

    def show 
    user = User.find(params[:id]) 

    render(json: Api::V1::UserSerializer.new(user).to_json) 
    end 
end 

Я генерироваться чванства документы с rake swagger:docs и может достигать http://localhost:3000/api-docs.json просто отлично, где я вижу в документации Users#show, но когда я нажимаю «Попробуйте!» , я получаю ошибку недостающий шаблон для api/v1/users/show

enter image description here


api-docs.json:

{ 
    "apiVersion": "1.0", 
    "swaggerVersion": "1.2", 
    "basePath": "http://localhost:3000", 
    "apis": [ 
    { 
     "path": "/api/v1/users.{format}", 
     "description": "Users" 
    } 
    ], 
    "authorizations": null 
} 

users.json:

{ 
    "apiVersion": "1.0", 
    "swaggerVersion": "1.2", 
    "basePath": "http://localhost:3000", 
    "resourcePath": "users", 
    "apis": [ 
    { 
     "path": "/api/v1/users/{id}.json", 
     "operations": [ 
     { 
      "summary": "Returns a user", 
      "parameters": [ 
      { 
       "paramType": "path", 
       "name": "id", 
       "type": "integer", 
       "description": "User Id", 
       "required": false 
      } 
      ], 
      "notes": "/api/v1/users/:id", 
      "responseMessages": [ 
      { 
       "code": 200, 
       "responseModel": "Users", 
       "message": "Success" 
      }, 
      { 
       "code": 401, 
       "responseModel": null, 
       "message": "Unauthorized" 
      }, 
      { 
       "code": 404, 
       "responseModel": null, 
       "message": "Not Found" 
      }, 
      { 
       "code": 406, 
       "responseModel": null, 
       "message": "Not Acceptable" 
      } 
      ], 
      "nickname": "Api::V1::Users#show", 
      "method": "get" 
     } 
     ] 
    } 
    ], 
    "authorizations": null 
} 

Как я могу вынести правильный ответ на мое шоу метода так, что он ищет сериализованный JSON, а не вид файл?

+0

FYI, это использование драгоценности 'swagger-docs'. Вот [repo] (https://github.com/richhollis/swagger-docs). – gabe

ответ

1

Итак, я нашел ответ. Во-первых, удалите все json-файлы, созданные rake swagger:docs, и добавьте в инициализатор swagger_docs.rb следующее: :clean_directory => true, чтобы запускалось каждое время rake swagger:docs, каталог в общей папке очищается.

Для того, чтобы чванство документы работать с тем, как я строю свой API с сериализаторы ActiveModel является изменение вверх DSL написано в Api::V1::UsersController, например, так:

swagger_api :show do 
    summary 'Returns a user' 
    param :path, :id, :integer, :optional, "User Id" 
    notes '/api/v1/users/:id' 
    end 

затем запустить rake swagger:docs и вызов, чтобы показать пользователь должен работать нормально.