10

Grape::API (MyApi) のサブクラスによって生成されたすべてのルートのリストを生成しようとしています。

私は呼び出すことで近づくことができます:

MyApi.send(:route_set).instance_variable_get(:@routes)

Rack::Mount::Route オブジェクトの配列が得られます。

有用な Route オブジェクトの唯一の属性は、次のようなハッシュを返す :conditions です。

 :path_info => (?-mix:\\A\\/api\\/(?<version>v1)\\/token(?:\\.(?<format>[^\\/]+))?\\Z)", "k: request_method, v: (?-mix:\\AGET\\Z)

ご覧のとおり、ハッシュの値は、ルートのパスを照合するための正規表現です。:named_captures を使用して、正規表現からすべての名前付きキャプチャを取得することもできます。

{:path_info=>{:version=>0, :format=>1}, :request_method=>{}}

最終的に私がやろうとしているのは、Grape::API を介して作成されたすべてのルートのリスト、それらのフルパスなどを生成することです。条件で正規表現を分解しようとするのは意味がありません。Rack::Mount::Route の人間が読めるパスにアクセス/生成する別の方法はありますか?

4

6 に答える 6

2

レールでグレープを使用している場合は、grape_on_rails_routes gem を確認してください。

実行するrake grape:routesと、現在のすべての API とその詳細 (URL、説明、バージョン) をきれいにフォーマットされたリストで確認できます。

于 2016-03-21T10:21:21.713 に答える
1

私がそれをした方法:

desc "Print out routes"
task :routes => :environment do
  StudyTube::API::V1::Base.routes.each do |route|
    info = route.instance_variable_get :@options
    description = "%-40s..." % info[:description][0..39]
    method = "%-7s" % info[:method]
    puts "#{description}  #{method}#{info[:path]}"
  end
end

それらをきれいに印刷します。私は切り捨てをいじっていましたが、もちろん、必要に応じてそれを取り除くことができます.

于 2014-02-26T08:27:16.187 に答える
0

あなたはこれを行うことはできません。ルートがコンパイルされると、それははるかに検査しにくいものになります。リバースエンジニアリングする代わりに、https://github.com/intridea/grape/pull/48/を参照してください。

于 2011-07-29T13:44:03.017 に答える