Heim >Backend-Entwicklung >PHP-Problem >So erstellen Sie einen API-Server mit PHP
Mit der rasanten Entwicklung von Mobilgeräten, Cloud Computing, Internet der Dinge und anderen Technologien sind APIs zu einem wichtigen Mittel für die Dateninteraktion zwischen verschiedenen Anwendungen und Systemen geworden. Im Bereich der Webentwicklung stellt PHP als beliebte Backend-Sprache viele Bibliotheken und Frameworks bereit, die die API-Implementierung erleichtern. In diesem Artikel wird erläutert, wie Sie mit PHP einen API-Server erstellen und den gesamten Prozess vom Entwurf bis zur Implementierung teilen.
1. Anforderungsanalyse und Designideen
Vor der Implementierung des API-Servers müssen wir die Anforderungen und Designideen klären. Dieser Artikel implementiert einen einfachen API-Server und seine Anforderungen können wie folgt zusammengefasst werden:
php -r "readfile('https://getcomposer.org/installer');" | php
composer require slim/slim
oder #🎜 🎜#
composer require illuminate/routing illuminate/httpHinweis: Wenn Sie sich für die Verwendung des Lumen-Frameworks entscheiden, müssen Sie die Schalter $app->withFacades() und $app->withEloquent() in der Datei bootstrap/app.php aktivieren, um das zu verwenden Fassade bereitgestellt durch Lumen und Eloquent ORM-Funktionalität.
$app->get('/hello/{name}', function ($request, $response, $args) { $name = $args['name']; $response->getBody()->write("Hello, $name"); return $response; }); $app->get('/users', 'UsersController:index'); $app->post('/users', 'UsersController:create');Hier sind 3 Routen definiert:
$app->add(new JwtAuthMiddleware());
namespace App\Controllers; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use App\Models\User; class UsersController { public function index(Request $request, Response $response) { $users = User::all(); $response = $response->withJson($users); return $response; } public function create(Request $request, Response $response) { $data = $request->getParsedBody(); $user = new User; $user->name = $data['name']; $user->email = $data['email']; $user->password = password_hash($data['password'], PASSWORD_DEFAULT); $user->save(); $response = $response->withJson($user); return $response; } }
Führen Sie den API-Server aus: Geben Sie das Projektverzeichnis in der Befehlszeile ein und führen Sie den folgenden Befehl aus:
php -S localhost:8000 -t public
composer require firebase/php-jwt
Autorisierungsserver erstellen: Im Stammverzeichnis erstellen Verzeichnis AuthorizationServer.php-Datei, zum Beispiel:
namespace App; use Firebase\JWT\JWT; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use App\Models\User; class AuthorizationServer { private static $key = 'your_secret_key'; public static function getToken(Request $request, Response $response) { $data = $request->getParsedBody(); $user = User::where('email', $data['email'])->first(); if (!$user || !password_verify($data['password'], $user->password)) { return $response->withStatus(401)->withJson([ 'error' => 'Invalid email or password.' ]); } $now = time(); $payload = array( 'iat' => $now, 'exp' => $now + 3600, 'sub' => $user->id ); $jwt = JWT::encode($payload, self::$key); return $response->withJson([ 'access_token' => $jwt, 'token_type' => 'Bearer', 'expires_in' => 3600 ]); } public static function authenticate(Request $request) { $jwt = isset($request->getHeader('Authorization')[0]) ? explode(' ', $request->getHeader('Authorization')[0])[1] : null; if (!$jwt) { throw new Exception('Unauthorized.'); } try { $decoded = JWT::decode($jwt, self::$key, array('HS256')); $user = User::find($decoded->sub); if (!$user) { throw new Exception('Unauthorized.'); } return $user; } catch (Exception $e) { throw new Exception('Unauthorized.'); } } }Hier wird ein AuthorizationServer-Autorisierungsserver definiert, einschließlich zweier Methoden:
这里使用了JWT加密框架,将用户信息存储在token中,并使用HS256算法加密。
namespace App\Middlewares; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use App\AuthorizationServer; class JwtAuthMiddleware { public function __invoke(Request $request, Response $response, $next) { try { $user = AuthorizationServer::authenticate($request); $request = $request->withAttribute('user', $user); return $next($request, $response); } catch (Exception $e) { return $response->withStatus(401)->withJson([ 'error' => $e->getMessage() ]); } } }
这里定义了一个JwtAuthMiddleware中间件,用户验证客户端请求的access token的有效性,并在后面的控制器中通过$request->getAttribute('user')获取到用户对象。
$app->post('/auth/token', 'AuthorizationServer:getToken'); $app->group('', function () use ($app) { $app->get('/users/@id', 'UsersController:getUser'); $app->put('/users/@id', 'UsersController:updateUser'); $app->delete('/users/@id', 'UsersController:deleteUser'); })->add(new JwtAuthMiddleware());
这里定义了一个/auth/token路由,用于获取访问令牌。另外,对于需要OAuth2授权的路由(getUser、updateUser和deleteUser),使用$app->group()方法包裹其中,并添加JwtAuthMiddleware中间件。
五、总结
本文介绍了如何使用PHP搭建API服务器,基于Slim或Lumen框架,解析URL参数、返回JSON格式的数据,并使用OAuth2框架保护API的安全性。使用这种方式搭建API服务器,可以快速、高效地开发出各种类型的RESTful API。但是,具体实现还需要根据实际需求进行适当调整和优化。
Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen API-Server mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!