Json RESTful Web服务的良好端点

Json RESTful Web服务的良好端点,json,web-services,rest,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://mya

我正在构建一个简单的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“Accept:application/json”应导致 差不多

{
  "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/' 
空空的身体是更好的方式吗?和同一个职位,一个空的机构和

'Accept: application/json' 
将以http 400错误结束。这是正确/合理的方法,还是有更好的方法

我将此作为一个服务来处理,它公开书籍、章节、图像资源,而web页面只是这些资源的表示之一。因此,从技术上讲,如果我在上述任何一个请求中输入'Accept:text/html',我应该期望得到所请求资源的html表示。同时,html实际上不是一种数据描述语言,而是一种表示语言,在关注点分离之后,建议将处理请求的模型资源和控制器代码与视图html分开

一般来说,公开资源的“api”应该与UI分开处理吗? 如果它是一个小的单页应用程序呢


提前感谢您的帮助

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

换言之:

得到

我会拿到35号的书,但是

职位

将使用您提供的任何post正文将新书插入后端存储,以表示该书的数据


希望这对……有帮助。

谢谢。这基本上就是我的思考过程。我想回答的问题是关于端点的问题。为了让帖子添加一本书,客户机需要知道必要的字段等,这些字段将通过html表单完成。因此,我试图为该表单提供一个良好的RESTful uri。现在我倾向于这样做,“新”可以被认为是一个特殊的图书id,表示需要向客户提交一个表单。我想你没有领会我的意思。url不应更改。它应该只是一篇到myapp.com/books的帖子,正文中包含书籍数据。您的服务器应该看到一篇文章,并知道它需要创建一本新书。通常情况下,服务器会返回保存的资源,或者只是返回其新生成的id。我理解这一点,但我的问题是在使用body发布之前会发生什么。在这个例子中,我说的是一个人与一个web应用程序进行交互。为了提交表单,必须将表单提交给用户。一种方法是使用单独的页面book_form.html,我在这里过于简化了,form method=POST action=。然后客户就可以得到,填写,然后发布。现在很明显,这根本不是RESTful。我想,我的问题可以重新表述为我是否需要一个指向表单的restful url,或者因为表单并不真正代表我的资源状态,所以这无关紧要?应用程序的前端不必符合REST。REST代表代表代表性状态转移,特别是通过RESTfulWebService层转移实体。甚至不要尝试在前端应用Restful API。