現在的專案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,post請求成功回傳201?而不是只要成功就回200?話說這些狀態碼真的是寫在回傳值裡嗎?不是應該http協議裡自動判定的嗎?或是在返回的header裡修改?這裡很迷糊,希望大神解惑!
有兩種方法
1.status_code全部200,反應體如下:
成功
失败
2.依照不同的status_code處理(建議)
成功(2xx)
,直接返回數據,不用額外包裝失败(4xx,5xx)
,返回errcode和errmsg{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,運營商可能會給你跳到他們自己的導航網站,那就尷尬了。
你的介面回傳資料 和http回應是兩個東西
介面回傳的code是內定的 想怎麼定就怎麼定
而你查的資料那是http回應的狀態碼 和你介面回傳無關
業務錯誤代碼 4xx
成功200 - 204
系統錯誤 5xx