我正在构建一个简单的RESTful服务,并试图提出良好的设计和直观的端点。这些是我在阅读了一堆关于REST的文章后想到的一些想法,并希望得到一些反馈。RESTful web服务的良好端点
将由服务被暴露的资源是书籍 - 为每个端点
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“接受:应用/ JSON 'http://myapp.com/books/35/chapters/2'应导致 像
{
"book": "The Adventures Of Huckleberry Finn",
"title": "The Boys Escape Jim",
"pages": 15,
"pictures": 3
}
,并' 接受了同样的要求:APPLI阳离子/ 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)分开。
一般来说,暴露资源的'api'应该与UI分开处理吗?
如果它是一个小型的单页面应用程序会怎么样?
感谢您提前提供的所有帮助!
谢谢。这基本上是我的过程。我试图回答的问题是关于端点的问题。为了让POST添加一本书,客户需要知道必要的字段等。对于通过html表单完成的人类。所以我试图想出一个很好的RESTful uri。现在我倾向于做http://myapp.com/books/new,其中'新'可以被认为是一个特殊的书籍ID,表明需要向客户呈现表格。 – user3326384
我想你错过了我的观点。该网址不应该改变。它应该是一个包含书籍数据的正文的myapp.com/books的POST。你的服务器应该看到一个POST进来,知道它需要创建一本新书。通常,服务器会返回已保存的资源,或者仅返回其新生成的ID。 – jgitter
我明白,但我的问题是关于POST之前发生的事情。有人填写并提交表单(在这个例子中,我正在谈论一个人与一个web应用程序交互)时发生与身体POST。为了提交表格,它必须呈现给用户。这样做的一种方法是将单独的页面book_form.html(我在这里简化了它)与form method =“POST”action =“http://myapp.com/books”。然后客户端可以获取http://myapp.com/book_form.html,填写它,然后执行POST。 – user3326384