我正在开发一个RESTful API,并对某些场景中最合适的响应状态代码提出疑问.
考虑客户端对资源发出GET请求的情况.对于资源合法不存在的情况,如何可能存在轻微的服务中断(在部署期间等),我如何消除"未找到"响应的歧义.
如何让我的WCF服务以RESTful方式传达错误?具体来说,如果调用者将无效的查询字符串参数传递给我的方法,我希望将400或404 HTTP错误返回给用户.当我搜索与WCF相关的HTTP错误状态时,我所能找到的只是人们试图解决他们收到的错误的页面.我宁愿不只是抛出一个FaultException,因为它会转换为500错误,这不是正确的状态代码.
在我们的一些系统中,我们有一个IP地址阻止列表,可以阻止某些IP查看网站.目前PHP只是发出文字说你的IP地址已被阻止等等等等.
然而
我遇到了HTTP错误代码403,更确切地说是错误代码403.6(http://en.wikipedia.org/wiki/HTTP_403),我认为它比文本更好.
但我在某处读到.6仅适用于Windows或其他类似的东西?
我可以从我的LAMP服务器通过PHP发送403.6标头,这会比发送"你被阻止的文本"更好吗?
有没有一种简单的方法来检查Ruby on Rails 中另一个网站(例如http://google.com)的状态代码?
理想情况下,要检查的URL列表将从DB中提取并通过CRON(或等效的)进行处理.
可能重复:
无效数据的REST响应代码
拥有以下REST资源:
POST /user/{primary_key}
该资源旨在像"ADD/UPDATE"操作一样工作.这意味着它可以用于:
如果客户想要创建新用户,则需要一些信息:
POST user/{pimary_key}
Paylod:
- Username - (must be unique)
- Password
如果客户想要简单地更新现有用户,则该呼叫仅需要包括主键和新/更改的信息.例如:
POST user/{pimary_key}
Paylod:
- favorite hamburger type
这种情况可能会导致来自客户端的多个请求无效:
username已由其他用户使用的值.在这些情况下返回的正确HTTP响应代码是什么?
非常感谢!
我只是无法理解,并且不知道在哪里看,因为以下代码的响应状态代码总是200,即使我在主Response类中将其设置为400.
class Api_Controller extends Base_Controller
{
public function __construct()
{
parent::__construct();
//header("HTTP/1.0 404 Not Found"); ##> This works
//die();
$test = array('1' => '2');
die(Response::json($test, 400));
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我没有使用任何扩展类,只是默认...
这是Response::json...上面的输出:http://pastebin.com/RGcinSdg
如您所见,输出具有已设置的值...但仍由于某种原因,返回200
var_dump(http_response_code());总是输出200
我已激活扩展版本Response::json并向其添加以下行
http_response_code($status);
Run Code Online (Sandbox Code Playgroud)
但我仍然很想知道它为什么不这样做,它应该如何
所以假设我有两个资源,Wallet和User.用户和电子钱包具有一对一的关系.在我的REST API中,我提供了一个选项,可以通过ID为用户提供不同的Wallet.因此,将用户移动到其他钱包的典型HTTP PUT请求可能如下所示:
PUT /api/user/3 HTTP/1.1
Host: api.myuserandwalletwebsite.com
{
"wallet_id": 15
}
Run Code Online (Sandbox Code Playgroud)
这将更新用户以使用id = 15的钱包.但是,如果PUT请求包含在数据库中找不到的wallet_id,该怎么办?那么REST API应该返回什么?只是一个简单的404?
在未找到的子资源上返回404对我来说感觉很奇怪,因为404会产生误导:你可能认为404实际上是指未找到用户.
我的业务层中有几个自定义异常,在我的ASP.NET应用程序中冒泡到我的API方法.
目前,它们都转换为Http状态500.如何映射这些自定义异常,以便我可以返回不同的Http状态代码?
502 Bad Gateway状态代码的定义是:
服务器在充当网关或代理时,在尝试完成请求时从其访问的上游服务器收到无效响应.
如果错误是由数据库引起的,它是一个适当的状态代码来响应吗?尽管500 Internal Server Error状态代码的定义没有说明错误必须是内部的,但我不喜欢在错误是外部时使用它.
Web服务器是否可以被视为网关或代理,因为它正在执行除与数据库通信之外的任务,例如调用其他API和服务?
我正在创建一个REST API,并且发现在某些情况下很难选择正确的HTTP状态代码.
假设我期望某个值,当它不存在时,我无法执行某个任务并返回错误.由于缺少值,服务器无法处理请求,但是发送它的客户端,状态良好但不完整.是否最好返回错误4xx或5xx错误?