12/08/2018, 15:56

Tìm hiểu gem grape-swagger.

Gem grape-swagger cung cung cấp cho ta việc tự động generate document cho Grape API , khi dùng gem này kết hợp với gem Swagger UI ta có 1 giao diện quản lý API document rất đẹp, bạn có thể xem demo ở đây: the petstore demo . Cài đặt. để cài đặt gem, ta chỉ cần them vào Gemfile: gem ...

Gem grape-swagger cung cung cấp cho ta việc tự động generate document cho Grape API , khi dùng gem này kết hợp với gem Swagger UI ta có 1 giao diện quản lý API document rất đẹp, bạn có thể xem demo ở đây: the petstore demo .

Cài đặt.

để cài đặt gem, ta chỉ cần them vào Gemfile:

gem 'grape-swagger'

và chạy bundle

Sử dụng

Trong Grape::API root class ta thêm vào dòng sau:

add_swagger_documentation

Ví dụ như sau:

require 'grape-swagger'

module API
  class Root < Grape::API
    format :json
    mount API::Cats
    mount API::Dogs
    mount API::Pirates
    add_swagger_documentation
  end
end

dòng config trên khai báo và cài đặt swagger document vào trong /swagger_doc.

Model Parsers

Bạn cần add thêm 2 gem là : grape-swagger-entity và grape-swagger-representable vào trong gem file để có thể sử dụng chức năng này:

# For Grape::Entity ( https://github.com/ruby-grape/grape-entity )
gem 'grape-swagger-entity'
# For representable ( https://github.com/apotonick/representable )
gem 'grape-swagger-representable'

Custom Model Parsers

Ta có thể tự tạo model parser, tham khảo tại roar như sau:

module GrapeSwagger
  module Roar
    class Parser
      attr_reader :model
      attr_reader :endpoint

      def initialize(model, endpoint)
        @model = model
        @endpoint = endpoint
      end

      def call
        # Parse your model and return hash with model schema for swagger
      end
    end
  end
end

để có thể sử dụng model parsers vừa tạo ta cần khai báo nó như sau:

GrapeSwagger.model_parsers.register(GrapeSwagger::Roar::Parser, Roar::Decorator)

trong trường hợp bạn tạo nhiều model parser thì có thể sử dụng 2 công cụ sau để kiểm soát trình tự của chúng:

insert_before

GrapeSwagger.model_parsers.insert_before(GrapeSwagger::Representable::Parser, GrapeSwagger::Roar::Parser, Roar::Decorator)

insert_after

GrapeSwagger.model_parsers.insert_after(GrapeSwagger::Roar::Parser, GrapeSwagger::Representable::Parser, Representable::Decorator)

Configure (Cấu hình)

Bạn có thể setting add_swagger_documentation để config 1 số những thông tin cơ bản sau:

Host.

Set địa chỉ host, giá trị mặc định được lấy từ request :

add_swagger_documentation 
   host: 'www.example.com'

base_path.

base path của API, mặc địn được lấy từ request:

add_swagger_documentation 
   base_path: nil

mount_path.

nơi mà API document được load, mặc định là /swagger_doc

add_swagger_documentation 
   mount_path: '/swagger_doc'

doc_version.

Xác định version của document, mặc định là 0.0.1

add_swagger_documentation 
   doc_version: '0.0.1'

và 1 số config khác có thể cài đặt tương tự như trên như: add_base_path , add_version , markdown , swagger_endpoint_guard , token_owner , security_definitions , security , models , tags, hide_documentation_path , info , bạn có thể đọc thêm tại đây

Bên cạnh ấy là Routes Configuration khá nhiều, trên github đã giới thiệu khá cụ thể, bạn có thể đọc tại đây

Ví dụ

Vào thư mục của project và chạy: $ bundle exec rackup và truy cập localhost:9292/swagger_doc để nhận kết quả.

Nhóm API bằng cách sử dụng Namespace

Ta có thể sử dụng namespace để nhóm các API vào như sau:

example code:

class NamespaceApi < Grape::API
  namespace :hudson do
    desc 'Document root'
    get '/' do
    end

    desc 'This gets something.',
      notes: '_test_'

    get '/simple' do
      { bla: 'something' }
    end
  end

  namespace :download do
    desc 'download files',
         success: File,
         produces: ['text/csv']
    get ':id' do
      # file response
    end
  end
end
  …

Tham khảo

https://github.com/ruby-grape/grape-swagger

0