RESTful Web服务的良好端点

时间:2014-02-21 21:23:23

标签: json web-services rest

我正在构建一个简单的RESTful服务,并试图提出良好的设计和直观的端点。这些是我在阅读了大量有关REST的文章后提出的一些想法,并希望得到一些反馈。

该服务将公开的资源是书籍 -

http://myapp.com/books/?type=fiction&age=15-35&author=american
http://myapp.com/books/35/chapters/2
http://myapp.com/books/35/chapters/2/pages/6
http://myapp.com/books/35/chapters/2/pictures/1

每个端点的响应表示取决于方法和Accept标头,即

GET -H'接受:application / json''http://myapp.com/books/35/chapters/2'应该导致

之类的东西
{
  "book": "The Adventures Of Huckleberry Finn",
  "title": "The Boys Escape Jim",
  "pages": 15,
  "pictures": 3 
}

和'Accept:application / xml'相同的请求会返回一个相同的xml表示。

我不清楚的一些事情:

由于REST规定我们应该使用名词,而不是动词,我如何公开html表单以输入新资源?

/ new或/ add根本不是RESTful。

GET 'Accept: text/html' 'http://myapp.com/books/new' 

成为表单页面的端点是否可接受?或者也许

POST 'Accept: text/html' 'http://myapp.com/books/' 

空身是更好的方法吗?和一个空身体相同的POST和

'Accept: application/json' 

最终会出现http 400错误。这是一种正确/合理的方法,还是有更好的方法来做到这一点?

我正在接近这个“暴露书籍,章节,图像”资源的服务,而“网页”只是这些资源的代表之一。所以,从技术上讲,如果我在任何提到的请求中加入'Accept:text / html',我应该期望获得所请求资源的html表示。同时,html实际上不是描述语言的数据,而是表示语言,并且在关注点分离后建议将模型(资源)和控制器(处理请求的代码)与视图(html)分开。 / p>

一般来说,暴露资源的'api'应该与UI分开处理吗? 如果它是一个小的单页应用程序怎么办?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你在这里问了很多问题。我只需加2美分。您在帖子开头显示的Restful API看起来不错。你谈到的那些“名词”是你的资源的名称,如书籍,章节,页面等.REST的想法围绕着使用用于与这些资源交互的HTTP动词。 GET请求将获取这些资源。 PUT / POST将插入或更新这些资源,DELETE将删除资源。

换句话说:

获取http://myapp.com/books/35

将获得ID为35的书,但

POST http://myapp.com/books/

将使用您提供的任何帖子正文将新书插入后端商店以表示该图书的数据。

希望有帮助...