首頁  >  問答  >  主體

php - 關於API 使用 HTTP 狀態碼還是全部回傳 200

現在的專案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裡修改?這裡很迷糊,希望大神解惑!

我想大声告诉你我想大声告诉你2713 天前852

全部回覆(6)我來回復

  • 巴扎黑

    巴扎黑2017-05-16 13:05:19

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

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

    失败

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

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

    []// 或者{}

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

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 13:05:19

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

    回覆
    0
  • 某草草

    某草草2017-05-16 13:05:19

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

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

    回覆
    0
  • 怪我咯

    怪我咯2017-05-16 13:05:19

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

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 13:05:19

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

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

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

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-16 13:05:19

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

    回覆
    0
  • 取消回覆