Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Entwicklungs-API-Schnittstelle

PHP-Entwicklungs-API-Schnittstelle

藏色散人
Freigeben: 2023-04-09 17:58:01
nach vorne
13613 Leute haben es durchsucht

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
PHP-Entwicklungs-API-Schnittstelle

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.

Rezeption

Ich 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 = &#39;API&#39;;
 //模拟前台请求服务器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[&#39;timeStamp&#39;] = $timeStamp;
  $arr[&#39;randomStr&#39;] = $randomStr;
  $arr[&#39;token&#39;] = self::TOKEN;
  //按照首字母大小写顺序排序
  sort($arr,SORT_STRING);
  //拼接成字符串
  $str = implode($arr);
  //进行加密
  $signature = sha1($str);
  $signature = md5($signature);
  //转换成大写
  $signature = strtoupper($signature);
  return $signature;
 }
}
Nach dem Login kopieren

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 = &#39;API&#39;;
 //响应前台的请求
 public function respond(){
  //验证身份
  $timeStamp = $_GET[&#39;t&#39;];
  $randomStr = $_GET[&#39;r&#39;];
  $signature = $_GET[&#39;s&#39;];
  $str = $this -> arithmetic($timeStamp,$randomStr);
  if($str != $signature){
   echo "-1";
   exit;
  }
  //模拟数据
  $arr[&#39;name&#39;] = &#39;api&#39;;
  $arr[&#39;age&#39;] = 15;
  $arr[&#39;address&#39;] = &#39;zz&#39;;
  $arr[&#39;ip&#39;] = "192.168.0.1";
  echo json_encode($arr);
 }
 /**
  * @param $timeStamp 时间戳
  * @param $randomStr 随机字符串
  * @return string 返回签名
  */
 public function arithmetic($timeStamp,$randomStr){
  $arr[&#39;timeStamp&#39;] = $timeStamp;
  $arr[&#39;randomStr&#39;] = $randomStr;
  $arr[&#39;token&#39;] = self::TOKEN;
  //按照首字母大小写顺序排序
  sort($arr,SORT_STRING);
  //拼接成字符串
  $str = implode($arr);
  //进行加密
  $signature = sha1($str);
  $signature = md5($signature);
  //转换成大写
  $signature = strtoupper($signature);
  return $signature;
 }
}
Nach dem Login kopieren
Ergebnis

string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage