php - 關於API 使用 HTTP 狀態碼還是全部回傳 200
我想大声告诉你
我想大声告诉你 2017-05-16 13:03:19
0
6
847

現在的專案api想用restful風格,然後目前的api介面回傳規範:所有成功介面回傳{status:200,msg:'',data:{}},出錯介面回傳{status:403,msg:'' ,data:{}},也就是只有200和403兩種狀態,我覺得不太對勁,搜了下網上的

    200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
    201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
    202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    204 NO CONTENT - [DELETE]:用户删除数据成功。
    400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
    401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
    406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

我是否要按照這樣的規範根據不同的情況去返回狀態碼?例如get請求成功回傳200,po​​st請求成功回傳201?而不是只要成功就回200?話說這些狀態碼真的是寫在回傳值裡嗎?不是應該http協議裡自動判定的嗎?或是在返回的header裡修改?這裡很迷糊,希望大神解惑!

我想大声告诉你
我想大声告诉你

全部回覆(6)
巴扎黑

有兩種方法
1.status_code全部200,反應體如下:
成功

{
  errcode: 0,
  errmsg: null,
  data: obj // 数据主体
}

失败

{
  errcode: 1, // 具体错误代码
  errmsg: '账号错误',
}

2.依照不同的status_code處理(建議)
成功(2xx),直接返回數據,不用額外包裝

[]// 或者{}

失败(4xx,5xx),返回errcode和errmsg

{
  errcode: 1,
  errmsg: '账号或密码错误',
}
Ty80

{status:200,msg:'',data:{}} 這個應該是你API裡自己寫的回傳結果吧,例如servlet裡回傳一個json字串包含這3個欄位。也就是說只有你的api返回成功時前端才能讀到這些資訊。如果請求失敗是讀不到的,你可以前端請求一個錯誤的url試試看

某草草

其實如果規範的話 應該是要這麼返回的
header('HTTP/1.0 401 Unauthorized');
header('HTTP/1.0 403 Forbidden');

不過實際情況下,很多人不會這麼規範。
連GET請求和POST請求都在混用,何談規範

刘奇

本來是應該照規範來的,但是國內電信業者可能會劫持跳轉。例如你回到 404,運營商可能會給你跳到他們自己的導航網站,那就尷尬了。

过去多啦不再A梦

你的介面回傳資料 和http回應是兩個東西

介面回傳的code是內定的 想怎麼定就怎麼定

而你查的資料那是http回應的狀態碼 和你介面回傳無關

習慣沉默

業務錯誤代碼 4xx
成功200 - 204
系統錯誤 5xx

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!