如何寫好接口
目的:清楚明白所寫接口的用途
安全性:做好接口的安全性,防止接口數(shù)據(jù)泄露,做好必要的參數(shù)加密措施
按需分配: 接受值和返回值要實用,不接受和返回不需要的數(shù)據(jù),返回值返回什么應與使用者時時溝通
規(guī)范性:參數(shù)命名規(guī)范有意義,讓使用者一目了然;返回值要包含調(diào)用接口狀態(tài)信息,返回數(shù)據(jù)格式最好使用JSON
日志:寫接口調(diào)用日志,方便查到接口調(diào)用錯誤,實現(xiàn)監(jiān)控和對接快捷
接口安全性與規(guī)范性參考
/** * 用戶登錄接口 * 請求方式:post * 接受參數(shù): * @param $mobile 用戶名 -- 可逆 通過 urlencode(base64_encode()) 加密 * @param $pwd 加密密碼 -- 可逆,同時定義一個加密規(guī)則 * return json * {"code":int,"message":string,"data":array} * 注意事項: * */ public function login() { $mobile = isset($_POST['mobile']) ? base64_decode(urldecode(escapeQuotes($_POST['mobile']))) : ''; $pwd = isset($_POST['pwd']) ? escapeQuotes($_POST['pwd']) : ''; $totp = isset($_POST['ttoken']) ? escapeQuotes($_POST['ttoken']) : ''; $commonmodel = self::getModel('common'); try { // 檢查參數(shù) $commonmodel->checkRight($mobile, 'mobile'); $commonmodel->checkRight($pwd, 'pwd'); $commonmodel->checkRight($totp, 'ttoken'); // 驗證登錄 $usersmodel = self::getModel('users'); $res = $usersmodel->userLogin($mobile, $pwd); } catch (Exception $e) { $res = array( 'code' => 10000, 'message' => $e->getMessage() ); } // 寫入接口日志 $des = "IP:" . getIp() . ";請求用戶登錄接口;返回:" . $res['message']; $commonmodel->logResult('10001', $res['code'], $des); echo json_encode($res); }
接受的參數(shù),比如用戶名和密碼都進行了加密處理,密碼可以定義一個更安全的加密規(guī)則,抓包查看請求參數(shù)也不會暴露用戶數(shù)據(jù)。
調(diào)用接口寫好接口日志,記錄調(diào)用什么接口,返回狀態(tài)碼,接口返回詳情等等。。。
返回值參考
{ code:0, message: "success", data: { key1: value1, key2: value2, ... } }
code: 返回狀態(tài)碼,1表示成功,非1表示各種不同的錯誤,10000可以用來表示客戶端傳參錯誤
message: 描述信息,成功時為”success”,錯誤時則是錯誤信息
data: 成功時返回的數(shù)據(jù),類型為對象或數(shù)組
不同錯誤就要定義不同的返回狀態(tài)碼,這里舉個例子:
狀態(tài)碼表
返回值 說明
10000 執(zhí)行異常,一般為客戶端傳參出錯
10001 用戶不存在
10002 密碼錯誤
10003 用戶狀態(tài)未激活
10004 redis保存值錯誤
10005 令牌(token)錯誤
10006 二維碼序列錯誤
10007 驗票錯誤
1 驗證成功,返回需要信息
10000可以定義為客戶端傳入的參數(shù)有錯,直接拋出異常,區(qū)別客戶端與服務端之間的錯誤
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號