- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在设计一个 REST 接口(interface),我对插入/更新/删除动词应该返回什么(作为响应的内容)感到困惑。考虑用于 Invoice
实体的接口(interface),可在 api/invoices
访问:
GET/api/invoices
返回发票列表GET/api/invoices/123
返回 ID 为 123 的发票POST/api/invoices
添加一张新发票(ID 在服务器上生成)POST/api/invoices/123
更新 ID 为 123 的发票DELETE/api/invoices/123
删除 ID 为 123 的发票很明显前两个方法应该返回什么,但是插入/更新/删除方法呢?一个明显的答案是 add
应该返回新创建的项目(即与 GET/api/invoices/id 完全相同的响应),update
应该返回更新的项目(同样,与 GET 相同)和 delete
应该可能不返回任何内容(空内容)。这一切都是有道理的,而且是一致的。
但是当考虑不像发票实体那么简单的项目时,我的问题就开始了。例如考虑一个 add
请求,它不仅添加项目,而且实际上需要返回一些关于添加操作的额外信息:项目被接受(成功),项目是重复的(成功信息), 该项目被忽略了(信息成功,我不会详细说明为什么),该项目被拒绝(失败)。同样在我的例子中,我想返回额外的信息,比如为桶预先设置的“响应”信息到新添加的项目中。我考虑将所有额外信息作为带外信息(例如 200 范围内的额外状态代码,甚至是自定义 header )放在 http header 中,但这是一个 hack,并且“响应”部分实际上可以大于项目本身。所以现在我正在考虑 add
动词返回一个全新的类型,一个包含添加信息的项目(状态、响应、新项目的 ID,也许是整个新项目)。它当然可以完成工作,但我怀念以前的美妙对称。
这是一个好的做法吗(当添加一个类型为“foo”的项目时,返回的类型为“bar”)或者我会在 6 个月后回顾并拔掉我的头发,因为我让猫离开了袋子?如果我坚持“对 foo 的任何访问都会返回 foo,包括添加”,那么客户端将不得不在“添加”操作之后进行额外的调用以检索它真正感兴趣的信息(即“响应”)。
最佳答案
您的回复应该相当复杂。它不应与入站请求匹配。我们使用 JSON,并且除了对象之外还有一些额外的信息。
典型响应:
[{ "ID": the generated ID, "TYPE": the actual class name, "OBJECT": { the object } }]
POST 应该返回创建的对象。如果您有额外的信息(这不是一个好主意),您可以在响应消息中携带它。
PUT 应该返回更新的结果。
DELETE 和 GET 一样,只能返回一个状态。
状态中的额外信息不是 hack——这就是状态代码如此开放的原因。
项目已被接受(成功)- 状态为 200 OK
该项目是重复的(信息成功)- 我不确定除了创建的最终对象之外您可能拥有什么信息,但这是 20 倍的地方 - OK WITH INFO 状态。
该项目被忽略(信息成功,我不会详细说明原因)- 这是模棱两可的。我不会称之为成功,我会称之为 40 倍——忽略。如果您不能详细说明原因,您可以称其为 20X - IGNORED。
项目被拒绝(失败)。这是一条普通的旧式 40X REJECTED 消息。
关于web-services - 集合、项、动词和REST接口(interface)设计 : what should POSTs return?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325295/
我正在实现一个包装队列的 REST'ish API。我需要对项目进行入队和出队。通常我会使用 GET 来查询,但在这种情况下,将某些东西出队会通过删除该项目来改变状态。所以 GET 似乎是一个糟糕的选
我想将多个 Action 映射到单个HTTP动词,像这样 "/product"(controller: "product"){ action : [POST: ["save", "clone"] ]
我一直在努力坚持 the approved list of Powershell verbs命名我的 cmdlet 时。我有一个创建资源的函数,所以它被称为 New-ClearCaseView。我还想
我有一个 restful Controller ,我想使用 destroy 函数这是我的路线: +-------------------------------+------------------
好吧,我的目标是从文本中提取 NE(人称)和与其相关的动词。例如,我有这段文字: Dumbledore turned and walked back down the street. Harry Po
有点基础,但我已经尝试了一些方法来解决以下错误但无法得到正确的解决方案。
我有一个带有条件操作的资源: /foos/{id}/authorize /foos/{id}/cancel 这个想法是,授权会将资源的状态从已保存(默认)更改为已授权(由第三方应用程序)。授权可以从远
我经常有一种方法来验证特定值。在 powershell 中,约定是在“get-verb”列表中使用动词,但我不知道哪个最适合这种用法。 或者,如果我的设计架构应该更改以避免以其他方式通过方法进行验证,
我正在关注这件事:J Dictionary 它告诉我发出命令 d by d over d!/d 其中 d 是一个列表,但我的 jqt 环境告诉我 value 错误:结束。如果问题是我应该导入/安装/激
Sinatra 是否支持 OPTIONS HTTP 动词?就像是: options '/' do response.headers["Access-Control-Allow-Origin"] =
我需要发送数据并比较API服务器中是否存在。例如: $a['foo'] = 'hello'; $a['bar'] = 'world'; $rest->verb('resource', $a); 如果
我正在为服务器应用程序完成一组 cmdlet。应用程序的一部分包括安全主体管理和数据对象管理,以及两者的“到期”(定时和手动)。在到期日期之后,安全主体的登录和访问将被拒绝,并且可以选择阻止对该主体拥
通常单词列表是 1 个包含所有内容的文件,但是是否有可单独下载的名词列表、动词列表、形容词列表等? 我特别需要它们来学习英语。 最佳答案 如果您仅从 wordnet.princeton.edu/dow
我想创建一个函数,它将一个数据框和一个包含列名的字符向量作为输入,并以安全的方式在内部使用 tidy verse 引用函数。 我相信我有一个我想做的事情的例子。我想知道是否有更优雅的解决方案或者我错误
使用 ShellExecute API,您可以指定一个动词,例如“打开”或“打印”。是否可以从命令行执行相同的操作? 最佳答案 http://www.naughter.com/shelexec.htm
在我的网站“联系我们”页面中有一个查询表单,当我提交该表单时,它会收到错误消息 405 - HTTP verb used to access this page is not allowed. The
我正在使用斯坦福解析器进行词性标记,我想从标记器所做的标记中获取名词、形容词动词、副词的单独同义词集。例如 如果我的输入查询是 “恒河是印度最大的河流,人们过去将它视为神” 标记器的输出是: “恒河/
我正在用 Python 构建一个非常简单的 REST 服务。它所做的只是接收一个 JSON 字符串,对其应用算法并发回 JSON 字符串响应。我了解 GET、POST、PUT 和 DELETE 之间的
我正在从事机器翻译项目。我需要确定句子的主语、动词、宾语才能继续我的工作。目前我正在使用斯坦福 NLP 解析器来分析句子。但我不知道如何提取 SVO。有什么我可以考虑的想法吗? 最佳答案 如果你想实现
我正在编写一个 REST 网络服务,将文本从一种语言翻译成另一种语言。文本可能相当大,最多可达几兆字节。 什么 HTTP 动词最适合使用? 我的第一个想法是使用 GET,因为它获取给定文本的翻译。但是
我是一名优秀的程序员,十分优秀!