2016-08-13 25 views
2

有沒有什麼辦法可以在Rails和Grape中使用公共頭文件,所以我不需要一遍又一遍地指定相同的頭文件?如何在Grails中添加Rails中的常用頭文件?

namespace :user do 
    desc 'Return a user.', { 
    headers: { 
     "Authorization" => { 
     description: "Some Token", 
     required: true 
     } 
    } 
    } 
    get do 
    {} 
    end 
end 

請注意,標題必須在我的所有API中反覆指定,因爲我希望它們是安全的。有沒有一種快捷方式(一種設計模式),我可以不用每次都創建這個頭文件?

而且沒有我不是在尋找這樣的事情:

def headers 
    { 
    "Authorization" => { 
     description: "Some Token", 
     required: true 
    } 
    } 
end 

namespace :user do 
    desc 'Return a user.', { 
    headers: headers 
    } 
    get do 
    {} 
    end 
end 
+2

爲什麼'高清headers'例如不好嗎?您正在快速折扣此選項。您始終可以使方法接受參數並將它們合併到結果哈希中。 –

+0

您可以使用的設計模式是繼承。創建一個始終實現授權標頭並從中擴展的基類。 – Rots

回答

1

這是我做過什麼:

應用程序/ API/api.rb

def my_headers 
    { 
    key1: { 
     description: 'hello', 
     required: true 
    }, 
    key2: { 
     description: 'hello', 
     required: false 
    } 
    } 
end 

# define my_headers outside of API class 

class API < Grape::API 
    version 'v1', using: :param, parameter: 'v', vendor: 'Larvata' 
    content_type :json, 'application/json' 

    # some codes ... 

應用程序/ API/home.rb

class Home < API 

resources :home do 

    desc "Home Page", { headers: my_headers } 
    get do 
     # some codes ... 

哦,對不起,您正在尋找這個解決方案...

+0

將'def my_headers'移動到'resource:home'上,效果可能會更好? – fangxing

+0

但是你必須在每個資源中定義它。 – zx1986

1

這工作得很好。
您可以添加返回頭定義到api根類並從每個api類調用它的類方法。

應用程序/ API/root.rb

module Api 
    class Root < Grape::API 
    def self.headers_definition 
     { 
     "Authorization" => { 
      description: "Some Token", 
      required: true 
     } 
     } 
    end 

    mount Home 
    end 
end 

應用程序/ API/home.rb

module Api 
    class Home < Grape::API 
    resources :home do 

     desc "Home Page", headers: Root.headers_definition 
     get do 
     # some codes ... 
     end 
     end 
    end 
    end 
end 
相關問題