In jedem Beispiel sehe ich, Menschen implementieren nur eine riesige api.rb-Datei. Ex:Wie teilt man die Dinge in einer Weintrauben-App auf?
Während dieser Ansatz in Ordnung können wie funktioniert, ist es schnell voll werden kann und schwer zu halten, so würde Ich mag Dinge aufzuspalten auf meinem App
Zum Beispiel möchte ich meine Entitäten von meinen Ressourcen trennen und dann meine Ressourcen zwischen verschiedenen Dateien aufteilen. Beispiele:
app
- api
api.rb
- entities
- weblog.rb
- post.rb
- comment.rb
- resources
- weblog.rb
- post.rb
- comment.rb
Nun api.rb wäre so etwas wie:
require 'grape'
module Blog
class API < Grape::API
prefix "api"
end
end
app/api/Einheiten/post.rb wäre so etwas wie sein:
module Blog
module Entities
class Post < Grape::Entity
root 'posts', 'posts'
expose :id
expose :content
end
end
end
app/api/resources/post.rb wäre etwas wie:
module Blog
class API < Grape::API
resource :posts do
get do
present Post.all, with: Blog::Entities::Post
end
desc "returns the payment method corresponding to a certain id"
params do
requires :id, :type => Integer, :desc => "Post id."
end
get ':id' do
present Post.find(params[:id]), with: Blog::Entities::Post
end
end
end
end
Wenn wir dies tun, stoßen wir auf die folgende Meldung:
Erwartet /blog-app/api/resources/post.rb Beitrag
definieren LÖSUNG (dank dB. und meine Mitarbeiter)
Sie haben die Struktur etwas ändern wie:
app
- api
api.rb
- resources
- post_api.rb
Dann wird in der post_api.rb
module Blog
class Resources::PostAPI < Grape::API
resource :posts do
get do
present Post.all
end
end
end
end
schließlich die api .rb wird:
require 'grape'
module Blog
class API < Grape::API
prefix 'api'
version 'v1', :using => :path
format :json
mount Blog::Resources::PostAPI => '/'
end
end
Jetzt sollte /api/v1/posts
funktionieren :)
Was wäre passiert, wenn ich eine andere Version von API - v2 hätte und ich würde einen anderen Namen des Attribut - Inhalts veröffentlichen wollen, also würde ich '' 'expose: body' '' anstelle von '' 'expose: content haben '' 'Inzwischen muss ich noch Unterstützung für v1 haben. Ich denke, ich werde Entitäten in den Versionsordner stellen, habe ich recht? Oder wie würdest du das in diesem Setup handhaben? –