In diesem Artikel erhalten Sie Studienhinweise zur Entwicklung von Hochverfügbarkeits- und Hochsicherheits-App-Backends in PHP. Freunde in Not können sich auf den Inhalt des Artikels beziehen
Download-Adresse des Quellcodes: https://. download.csdn .net/download/qq_21683643/10331534
Verzeichnis
1. Sicherheit
2. Autorisierungscode-Zeichenalgorithmus
4. Token ist einzigartig. Sexuelle Unterstützung
5. API-Unterstützung für einmalige Anfragen
6. Hohe Verfügbarkeit
7. Restful API
8. Ähnlichkeiten und Unterschiede zwischen Web-Login und APP-Login
9. Alibabas Komplexes Anmeldeszenario für die SMS-Überprüfungslösung
11. Lösung für die lokale Zeit- und Serverzeitkonsistenz der APP
13 🎜>14. Verwenden Sie Qiniu Cloud, um grundlegende Bildverarbeitungsdienstfunktionen zu lösen
16. Durchdringung von PHP-Entwurfsmustern
17
18. Asynchrone Dateninteraktion zwischen PHP und Ajax
1. Restful API
Datenstrukturformat
implementiert
3. Status Geschäftsstatuscode
4. Nachrichtenaufforderungsnachricht
5. Datenschicht
Universelle API-Schnittstellen-Datenkapselung
Unvorhersehbare interne Ausnahme-API-Datenausgabelösung
Konfigurieren Sie „Exception_Handle“, um den Ausnahmeklassenpfad auszufüllen
function show($status, $message, $data=[], $httpCode=200) { $data = [ 'status' => $status, 'message' => $message, 'data' => $data, ]; return json($data, $httpCode); }
2. APP-API-Datensicherheitslösung
class ApiHandleException extends Handle { /** * http 状态码 * @var int */ public $httpCode = 500; public function render(\Exception $e) { // 还原正常报错,上线后为flase(服务端开发) if(config('app_debug') == true) { return parent::render($e); } if ($e instanceof ApiException) { $this->httpCode = $e->httpCode; } return show(0, $e->getMessage(), [], $this->httpCode); } }class ApiException extends Exception { public $message = ''; public $httpCode = 500; public $code = 0; /** * @param string $message * @param int $httpCode * @param int $code */ public function __construct($message = '', $httpCode = 0, $code = 0) { $this->httpCode = $httpCode; $this->message = $message; $this->code = $code; } }
Lösung für APP- und serverseitige Zeitkonsistenz
Lösung 1: Holen Sie sich die serverseitige Zeit, und der Client erhält zum Vergleich die richtige Zeit von der Serverseite.
Lösung 2: Zeitstempel beim Initialisieren der App übertragen, Clientzeit = Serverzeitstempel + Differenz
/** * 生成每次请求的sign * @param array $data * @return string */ public static function setSign($data = []) { // 1 按字段排序 ksort($data); // 2拼接字符串数据 & $string = http_build_query($data); // 3通过aes来加密 $string = (new Aes())->encrypt($string); return $string; }/** * 检查sign是否正常 * @param array $data * @param $data * @return boolen */ public static function checkSignPass($data) { $str = (new Aes())->decrypt($data['sign']); if(empty($str)) { return false; } // diid=xx&app_type=3 parse_str($str, $arr); if(!is_array($arr) || empty($arr['did']) || $arr['did'] != $data['did'] ) { return false; } // 有效时间:时间间隔不能超过60s if(!config('app_debug')) { if ((time() - ceil($arr['time'] / 1000)) > config('app.app_sign_time')) { return false; } //echo Cache::get($data['sign']);exit; // 唯一性判定 if (Cache::get($data['sign'])) { return false; } } return true; }/** * 检查每次app请求的数据是否合法 */ public function checkRequestAuth() { // 首先需要获取headers $headers = request()->header(); // todo // sign 加密需要 客户端工程师 , 解密:服务端工程师 // 1 headers body 仿照sign 做参数的加解密 // 2 // 3 // 基础参数校验 if(empty($headers['sign'])) { throw new ApiException('sign不存在', 400); } if(!in_array($headers['app_type'], config('app.apptypes'))) { throw new ApiException('app_type不合法', 400); } // 需要sign if(!IAuth::checkSignPass($headers)) { throw new ApiException('授权码sign失败', 401); } Cache::set($headers['sign'], 1, config('app.app_sign_cache_time')); // 1、文件 2、mysql 3、redis $this->headers = $headers; }
API-Schnittstellenadresse Anforderungsmethode Post-Eingabeparameterformat Ausgabeparameterformat http-Code
4. APP-Versions-Upgrade-Geschäftsentwicklung Tabellendesign
TABELLE ERSTELLEN
( int(10 ) unsigned NOT NULL,
varchar(20) NOT NULL DEFAULT ” COMMENT 'App-Typ wie iOS Android', ent_version
int(8) unsigned NOT NULL DEFAULT '0 ' COMMENT 'Interne Version number', id
varchar(20) NOT NULL DEFAULT ” COMMENT 'Externe Versionsnummer wie 1.2.3', app_type
tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'Ob Update erzwingen 0 nein, 1 Update erzwingen', version
varchar(255) NOT NULL DEFAULT ” KOMMENTAR 'apk neueste Adresse', version_code
varchar(500) NOT NULL DEFAULT ” KOMMENTAR 'Upgrade-Eingabeaufforderung' , is_force
tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Status', apk_url
int(10) unsigned NOT NULL DEFAULT '0', upgrade_point
int (10) unsigned NOT NULL DEFAULT '0' status
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; create_time
5. Login-Entwicklung
update_time
1.1 Einführung in die APP-Login-Geschäftsentwicklung
Apps haben zwei Zustände: angemeldet und nicht angemeldet.
Warum müssen Sie sich anmelden? Benutzer abbauen, interagieren und kommunizieren Wie melde ich mich bei der APP an? Imitieren Sie andere App-AnmeldungenAndere Anmeldemethoden: passwortfreier Bestätigungscode für die Mobiltelefonnummer, Kontopasswort
Anmeldemethoden von Drittanbietern: QQ-Autorisierung, WeChat-Autorisierung, Weibo-Autorisierung
1.2 Design der App-Login-Tabellenstruktur
TABELLE ERSTELLEN
(
int(10) unsigned NOT NULL COMMENT 'primary key',
varchar(20) NOT NULL DEFAULT ” COMMENT 'username', ent_user
char(32) NOT NULL DEFAULT ” KOMMENTAR 'Passwort', id
varchar(11) NOT NULL DEFAULT ” KOMMENTAR 'Mobiltelefonnummer', username
varchar(100) NOT NULL DEFAULT ” KOMMENTAR 'Bestelltoken', password
int(10) unsigned NOT NULL STANDARD '0' KOMMENTAR 'Token-Ablaufzeit', phone
varchar(200) NICHT NULL STANDARD ” KOMMENTAR 'Avatar', token
tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'Geschlecht 0 männlich 1 weiblich', time_out
varchar(200) NOT NULL DEFAULT ” COMMENT 'Persönliche Signatur', image
int (10) unsigned NOT NULL DEFAULT '0' COMMENT 'Registrierungszeit', sex
int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Login-Zeit', signature
tinyint(1 ) NOT NULL DEFAULT '0' COMMENT 'Ist der Status gesperrt' create_time
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.3 Einführung in die Alibaba Cloud Communication Service Platformupdate_time
Was ist Alibaba?
Alibaba bietet Dienste an SMS-, Sprach- und andere personalisierte Dienstestatus
1.4 Entwicklung der Funktion zum Senden von SMS-Bestätigungscodes
1.5App-Login-Token-Eindeutigkeitsalgorithmus
App ruft Login auf, der Server gibt verschlüsselte Token-Informationen zurück, jedes Mal, wenn die App die Schnittstelle anfordert, muss sie das Token mitbringen
App generiert ein eindeutiges Token und verschlüsselt es: Token =Token+13-Bit-Zeitstempel
1.6App-Anmeldung per Passwort
Sowohl Benutzername als auch Passwort müssen verschlüsselt und an den Server übertragen werden
6. APP-seitige Anomalien, Leistungsüberwachung und Positionierung Analyse
Grundlage der Ausnahmen auf der APP-Seite:
Crach Bei der Nutzung der App ist ein plötzlicher Absturz aufgetreten
Stottern und Bildschirmverzögerung
Ausnahmeanomalie im Programm
ANR-Popup Box fordert keine Antwort auf (Android)
Datenerfassungsplan:
Erstellen Sie eine Ausnahmeleistungstabelle und entwickeln Sie eine API-Schnittstelle
ID-Primärschlüssel
app_type App-Typ
version_code Versionsnummer
Modellgerät Modell
Hat die Geräte-ID
Typ verwenden verwenden ‐ zu statistischen Daten, wie zum Beispiel: Umeng Statistics
7. APP-Nachrichten-Push-Service-Lösung
Umfrage Methode: APP sendet regelmäßig http-Anfragen an den Server, um zu sehen, ob eine Nachricht vorliegt
Drittanbieterplattform: Server->Drittanbieterplattform->app
Verwandte Empfehlungen:
Einige PHP-Entwicklungssicherheitsprobleme zusammengestellt
PHP Detaillierte Erläuterung der Prinzipien und Verwendung der Sitzungsentwicklung
Das obige ist der detaillierte Inhalt vonPHP-Entwicklung von Hochverfügbarkeits- und Hochsicherheits-App-Backend-Studiennotizen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!