In tutti gli esempi, le persone implementano solo un file api.rb gigante. Es:Come dividere le cose in un'app api d'uva?
Anche se questo approccio funziona bene come è, si può rapidamente diventare affollato e difficile da mantenere così vorrei dividere le cose sul mio app.
Per esempio, vorrei dividere le mie entità dalle mie risorse e quindi suddividere le mie risorse tra diversi file. Per alcuni esempi:
app
- api
api.rb
- entities
- weblog.rb
- post.rb
- comment.rb
- resources
- weblog.rb
- post.rb
- comment.rb
Ora, api.rb sarebbe qualcosa di simile:
require 'grape'
module Blog
class API < Grape::API
prefix "api"
end
end
app/api/enti/post.rb sarebbe qualcosa di simile:
module Blog
module Entities
class Post < Grape::Entity
root 'posts', 'posts'
expose :id
expose :content
end
end
end
app/api/resources/post.rb sarebbe qualcosa di simile:
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
Quando facciamo questo, incontriamo il seguente messaggio:
Previsto /blog-app/api/resources/post.rb per definire Messaggio
SOLUZIONE (grazie a dB. ei miei collaboratori)
Devi cambiare la struttura a qualcosa di simile:
app
- api
api.rb
- resources
- post_api.rb
Poi, nel post_api.rb
module Blog
class Resources::PostAPI < Grape::API
resource :posts do
get do
present Post.all
end
end
end
end
Infine, il api .rb diventa:
require 'grape'
module Blog
class API < Grape::API
prefix 'api'
version 'v1', :using => :path
format :json
mount Blog::Resources::PostAPI => '/'
end
end
Ora /api/v1/posts
dovrebbe funzionare :)
Cosa accadrebbe se avessi un'altra versione di API - v2 e vorrei esporre un nome diverso del contenuto dell'attributo, quindi diciamo che avrei expero: body''' invece di '' 'expose: content '' 'nel frattempo dovrò ancora avere il supporto per v1. Penso che inizierò a inserire Entities nella cartella delle versioni, ho ragione? O come lo gestiresti in questa configurazione? –