Avec le développement rapide du mobile, du cloud computing, de l'Internet des objets et d'autres technologies, les API sont devenues un moyen important d'interaction de données entre diverses applications et systèmes. Dans le domaine du développement Web, PHP, en tant que langage back-end populaire, fournit de nombreuses bibliothèques et frameworks qui facilitent la mise en œuvre d'API. Cet article expliquera comment utiliser PHP pour créer un serveur API et partager l'ensemble du processus, de la conception à la mise en œuvre.
1. Analyse des exigences et idées de conception
Avant de mettre en œuvre le serveur API, nous devons clarifier les exigences et les idées de conception. Cet article implémente un serveur API simple, et ses exigences peuvent être résumées comme suit :
Avant de construire le serveur API, nous devons préparer les environnements de développement nécessaires tels que PHP et MySQL. Vous pouvez choisir d'utiliser un environnement de développement intégré (IDE) tel que PHPStorm, Eclipse, etc., ou vous pouvez utiliser un éditeur léger tel que Visual Studio Code, Sublime Text, etc. Cet article prend PHPStorm comme exemple.
Installer PHPStorm et l'environnement PHP : Téléchargez PHPStorm Pendant le processus d'installation, vous serez invité à installer l'environnement PHP par défaut, ou vous pouvez choisir vous-même le chemin d'installation. Une fois l'installation terminée, exécutez PHPStorm, ouvrez les Préférences et ajoutez l'interpréteur PHP dans Langages et frameworks > PHP.php -r "readfile('https://getcomposer.org/installer');" | php
3. Construisez le serveur API
Avec l'environnement de développement ci-dessus, nous pouvons commencer à construire le serveur API.
Créer un projet : Créez un nouveau projet PHP dans PHPStorm et utilisez Composer pour installer le framework Slim ou Lumen :composer require slim/slim
composer require illuminate/routing illuminate/http
Remarque : Si vous choisissez d'utiliser le framework Lumen, vous devez l'installer dans le Fichier bootstrap/app.php Activez les commutateurs $app->withFacades() et $app->withEloquent() pour utiliser les fonctions Facade et Eloquent ORM fournies par Lumen.
Création de routes : la création de routes et de middleware est facile dans le framework Slim ou Lumen. Créez le fichier routes.php dans le répertoire racine, par exemple :$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');
$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; } }
php -S localhost:8000 -t public
Par défaut, le serveur API n'est pas sécurisé car n'importe qui peut accéder à l'interface et modifier les données. Pour sécuriser l'API, nous pouvons utiliser l'autorisation OAuth2. OAuth2 est un protocole d'autorisation standard qui peut autoriser des applications tierces à accéder aux ressources protégées d'un utilisateur spécifique sur un serveur de ressources sans révéler le nom d'utilisateur et le mot de passe. Dans cet article, nous utilisons le framework JWT de Firebase pour implémenter l'autorisation OAuth2.
Installez le framework Firebase JWT : Utilisez Composer pour installer le framework Firebase JWT :composer require firebase/php-jwt
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.'); } } }
这里使用了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。但是,具体实现还需要根据实际需求进行适当调整和优化。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!