美文网首页
使用Grape和Grape-Entity构建一个简单的API——

使用Grape和Grape-Entity构建一个简单的API——

作者: 花前山谷 | 来源:发表于2019-11-27 21:49 被阅读0次

在第1部分中,我们已经构建了一个简单的API。现在我们有两个模型,分别是book和flow,我们创建了第一个API用来返回图书列表。
我们的目录结构类似于:

.app
 .api
  .book_store
   .v1
    - books.rb
  base.rb

在第二部分,我们会使用Grape-Entity并且向你展示怎样通过请求API获取一本特定书的信息。


Entities

Entities是与Grape框架搭配使用的。Entities允许我们从模型中筛选我们想要的数据。
现在我们发出请求:

http://localhost:3000/api/v1/books

会获得如下结果:

{"id":1,"isbn":3999,"title":"Enhanced Smell","stock":9,"created_at":"2017-04-25T20:33:46.292Z","updated_at":"2017-04-25T20:33:46.292Z"}

通过在我们的API中创建entities文件夹来简化返回的数据。

mkdir -p app/api/book_store/entities

在新建的文件夹下创建book entity。

touch app/api/book_store/entities/book.rb

我们可以再新建的book.rb文件下添加如下代码:

module BookStore
  module Entities
     class Book < Grape::Entity
       expose :isbn
       expose :title
       expose :stock
    end
  end
end

通过ID返回信息

我们需要创建第二个方法并且以同样的方法生成路由。
在app/api/book_store/v1/books.rb文件中添加如下代码:

 desc 'Return a specific book'
   route_param :id do
    get do
     book = Book.find(params[:id])
     present book
   end
 end

route_param :id :允许我们通过ID来选择一本书。

看一下grape的路由:

rails grape:routes

返回

GET  |  /api/:version/books(.json)      |  v1  |  Return list of books  
GET  |  /api/:version/books/:id(.json)  |  v1  |  Return a specific book

现在我们有两个路由了,我们来试一下新增加的路由!

http://localhost:3000/api/v1/books/1

结合entity使用:

present book替换为
present book, with: BookStore::Entities::Book

总结

至此我们完成了第二部分,在第二部分中我们创建了entity并且向API中添加了第二个路由。
在第三部分中我们会尝试返回一些更复杂的结构!


译自

https://medium.com/@clementrollon/build-a-basic-api-with-grape-api-grape-entity-part-2-25ed0d22dfb7

相关文章

网友评论

      本文标题:使用Grape和Grape-Entity构建一个简单的API——

      本文链接:https://www.haomeiwen.com/subject/lxvmwctx.html