2015-11-08 4 views
2

Его интересная занятая неделя. Я работаю над проектом Rails и включил Grape для реализации API .Grape API (swagger doc) - Глобальная конфигурация 'desc'

API-интерфейс имеет 2 секции

  • Нет аутентификации требуется (без заголовков)
  • Auth требуется

I установка приложения с и все работает ...

  • Виноградная лоза
  • Виноградная ловушка
  • винограда чванство Рельсы

Для о том, что заголовок требуется я использую некоторые вещи, как это ...

class ProfilesApi < Grape::API 

    resource :profiles do 

    desc 'List all profiles' do 
     headers Authorization: { 
       description: 'Validates identity through JWT provided in auth/login', 
       required: true 
       } 
    end 
    get do 
     present User.all, with: Presenters::ProfilePresenter 
    end 
    end 
end 

Теперь проблема заключается в том, что я это описание в большом количестве подобных сборно классов API ,

Есть ли способ, который может сделать это обычным (вид унаследованного), так что мне не нужно определять его с помощью каждого метода Винограда.

desc 'List all profiles' do 
     headers Authorization: { 
       description: 'Validates identity through JWT provided in auth/login', 
       required: true 
       } 
    end 

Спасибо заранее и надеюсь, что вы, ребята, наслаждаетесь выходными.

ответ

5

Да, есть способ. Я достигаю этого, определяя метод в class API, чтобы он был доступен во всем, что наследуется от API. Что-то вроде:

module Myapp 
    class API < Grape::API 
    def self.auth_headers 
     { Authorization: { description: 'Validates identity through JWT provided in auth/login',required: true}} 
    end 
    end 
end 

И доступ к нему так:

desc "List all profiles", { 
    headers: Myapp::API.auth_headers 
} 

Конечно, там уже много больше возможностей, но они зависят от реализации.

0

я думаю, что это может быть обновленной версией виноградного апи вещи, я должен был получить эту работу с:

desc 'My description text' do 
     headers Authorization: {description: "pass the access token as Bearer", required: true } 
    end