Heim > Artikel > Backend-Entwicklung > PHP-Entwicklungs-API-Schnittstelle
Empfohlen: „PHP-Video-Tutorial“
php-API-Schnittstelle
In der tatsächlichen Arbeit wird häufig PHP zum Schreiben der API-Schnittstelle verwendet. Nachdem PHP die Schnittstelle geschrieben hat, kann die Rezeption die von der Schnittstelle bereitgestellten Daten über den Link abrufen In diesem Fall kennt der Server bei XML und JSON die Quelle der Anforderung nicht. Möglicherweise ruft jemand anderes illegal unsere Schnittstelle auf, um Daten abzurufen. Daher muss eine Sicherheitsüberprüfung durchgeführt werden.
Verifizierungsprinzip
Schematische Darstellung
Prinzip
Wenn die Rezeption die Schnittstelle aufrufen möchte, muss sie mehrere Parameter verwenden, um eine Signatur zu generieren.
Zeitstempel: aktuelle Zeit
Zufallszahl: zufällig generierte Zufallszahl
Passwort: Während der Front-End- und Back-End-Entwicklung eine Kennung, die beiden Parteien bekannt ist und einem Geheimcode entspricht
Algorithmusregeln: Vereinbarte Betriebsregeln, Die oben genannten drei Parameter können mithilfe algorithmischer Regeln eine Signatur generieren.
Das Frontend generiert eine Signatur, und wenn auf die Schnittstelle zugegriffen werden muss, werden der Zeitstempel, die Zufallszahl und die Signatur über die URL an das Backend übergeben. Nachdem der Zeitstempel und die Zufallszahl im Hintergrund abgerufen wurden, berechnet er die Signatur anhand derselben Algorithmusregeln und vergleicht sie dann mit der übergebenen Signatur. Wenn sie identisch sind, werden die Daten zurückgegeben.
Algorithmusregeln
Bei Front-End- und Back-End-Interaktionen sind Algorithmusregeln sehr wichtig. Sowohl das Front-End als auch das Back-End müssen Signaturen durch Algorithmusregeln berechnen, es kommt darauf an, wie es gefällt dir.
Meine Algorithmusregeln sind: 1. Sortieren Sie den Zeitstempel, die Zufallszahl und das Passwort in der Reihenfolge des ersten Buchstabens In Kapital umrechnen.
RezeptionIch habe hier keine echte Rezeption. Ich verwende direkt eine PHP-Datei, um die Rezeption zu ersetzen, und simuliere dann GET-Anfragen über CURL. Ich verwende das TP-Framework und das URL-Format ist das Pathinfo-Format. Quellcode<?php /** * Created by PhpStorm. * User: Administrator * Date: 2020/3/16 0016 * Time: 15:56 */ namespace Client\Controller; use Think\Controller; class ClientController extends Controller{ const TOKEN = 'API'; //模拟前台请求服务器api接口 public function getDataFromServer(){ //时间戳 $timeStamp = time(); //随机数 $randomStr = $this -> createNonceStr(); //生成签名 $signature = $this -> arithmetic($timeStamp,$randomStr); //url地址 $url = "http://www.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr}/s/{$signature}"; $result = $this -> httpGet($url); dump($result); } //curl模拟get请求。 private function httpGet($url){ $curl = curl_init(); //需要请求的是哪个地址 curl_setopt($curl,CURLOPT_URL,$url); //表示把请求的数据已文件流的方式输出到变量中 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $result = curl_exec($curl); curl_close($curl); return $result; } //随机生成字符串 private function createNonceStr($length = 8) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return "z".$str; } /** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ private function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; } }Serverseitig
Vordergrunddaten zur Überprüfung akzeptieren
Quellcode
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2020/3/16 0016 * Time: 16:01 */ namespace Server\Controller; use Think\Controller; class ServerController extends Controller{ const TOKEN = 'API'; //响应前台的请求 public function respond(){ //验证身份 $timeStamp = $_GET['t']; $randomStr = $_GET['r']; $signature = $_GET['s']; $str = $this -> arithmetic($timeStamp,$randomStr); if($str != $signature){ echo "-1"; exit; } //模拟数据 $arr['name'] = 'api'; $arr['age'] = 15; $arr['address'] = 'zz'; $arr['ip'] = "192.168.0.1"; echo json_encode($arr); } /** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ public function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; } }Ergebnis
string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"Zusammenfassung
Diese Methode ist eigentlich nur eine davon Es gibt viele Möglichkeiten, eine Sicherheitsüberprüfung durchzuführen.
Das obige ist der detaillierte Inhalt vonPHP-Entwicklungs-API-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!