[英]Public API design - handling failure with a http code? Is that REST?
我将要在自己的服务器上使用PHP为我所在领域的其他程序员提供Web服务。
因为这是我第一次这样做,所以我首先研究了我经常使用的API,Flickr等。
通过检查GET参数,我的服务返回从很大的csv文件中提取的精细数据,它是只读的。
数据以各种格式返回,例如xml,json,jsonp等。
呼叫示例:/?offices = ABC | XYZ&format = xml
首先,我想知道我是否正确地将我的服务称为“ API”?
我也想知道如何最好地处理失败。
如果用户未提交预期的输入,我将返回纯文本消息-“您未提交任何办公室”。
在发生任何其他无法预料的故障时,此刻它会以所选格式的有效负载返回一条故障消息,例如,其中包含单个数组“ fail”的json,我已对此进行了记录。
最近在REST上进行了一些阅读,如果不是由于滥用“ API”而导致的失败-我是否应该返回HTTP代码200以外的内容?
如果您正在访问此服务,您希望看到什么?
我应该把它作为另一个GET选项吗?
例如/?offices = ABC | XYZ&format = xml&on_failure = http
还是我在术语API和REST之间感到困惑?
所以建议这个帖子,涉及400/401
REST API服务针对验证失败返回什么适当的HTTP状态代码?
但我想澄清我使用的术语。 如果有效负载包含错误消息-就像Flickr一样,那么为什么我应该远离它呢?
像Flickr和Twitter这样的大型提供者已经使REST的定义更加混乱。 现在,许多开发人员错误地认为基于HTTP的任何服务或API都是“ RESTful”的。 您在此处描述的更多是使用RPC形式的数据Web服务。 真正的RESTful API使用流畅的HTTP和Web标准,并且以资源为中心。
为了回答有关HTTP状态代码的主要问题,我想说对于RPC服务来说没有必要,因为HTTP状态代码并不总是直接转换为方法调用错误。 更好的方法是映射您自己的错误代码,并将其与状态消息一起返回。
例如,用于用户查找的RPC服务在成功时可能返回以下内容:
SUCCESS=1
USERNAME=example
FIRSTNAME=Example
LASTNAME=User
DISPLAYNAME=Example User
相同的服务可能会在失败时返回以下内容:
SUCCESS=0
ERRORCODE=1002
ERRORMSG=User subsystem error; requested user was not found.
在RPC服务中,响应的确切细节非常灵活。 它所做的只是将方法调用的结果中继给调用者。 只要记录下开发人员应该看到的内容,并返回清晰一致的消息,就可以正常工作。 RPC服务应返回的唯一HTTP状态代码是200和500(只有这样,当事情严重中断时,您甚至无法返回正确的错误)。
回到REST的问题,如果我们将用户视为资源并使用适当的URL方案,则可以使同一用户服务成为RESTful。 RESTful API的非常非常基本的组成如下:
GET / api / users-应该返回系统中可用用户帐户的列表。
GET / api / users / example-应该返回示例帐户的详细信息; 如果用户不存在,则返回404 HTTP状态。
POST / api / users-创建一个新的用户帐户; 应该返回到新创建的帐户的链接(这样做的方式有所不同,但是LOCATION标头在这里有意义)。 根据结果,可能会返回各种HTTP状态代码。
PUT / api / users / example-编辑现有用户帐户的详细信息。 根据结果,可能会返回各种HTTP状态代码。
删除/ api / users / example-删除现有的用户帐户。 根据结果,可能会返回各种HTTP状态代码。
RESTful接口最常用的标准HTTP状态代码如下。
希望此信息有用,而不是过载。 :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.