Heim >Backend-Entwicklung >PHP-Problem >So erstellen Sie einen API-Server mit PHP

So erstellen Sie einen API-Server mit PHP

PHPz
PHPzOriginal
2023-04-21 09:06:571725Durchsuche

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:

  1. unterstützt das HTTP-Protokoll und kann GET, POST und andere Anfragen verarbeiten; URL-Parameter analysieren, RESTful-API implementieren;
  2. kann Daten im JSON-Format zurückgeben;
  3. unterstützt die OAuth2-Autorisierung, um die Sicherheit der API zu schützen.
  4. Um die oben genannten Anforderungen zu erreichen, können wir die folgenden Designideen berücksichtigen:

Verwenden Sie zum Erstellen das PHP-Erweiterungspaket Slim oder Lumen Der API-Server bietet gutes Routing, Middleware, Controller und andere strukturierte Programmiertools sowie einen umfangreichen Plug-in-Mechanismus. 🎜🎜#Anforderungsparameter im Controller abrufen, Modell aufrufen, um auf die Datenbank oder andere Datenquellen zuzugreifen, und Daten im JSON-Format ausgeben.
  1. 2. Erstellen Sie eine Entwicklungsumgebung
  2. Bevor wir einen API-Server erstellen, müssen wir notwendige Entwicklungsumgebungen wie PHP und MySQL vorbereiten. Sie können eine integrierte Entwicklungsumgebung (IDE) wie PHPStorm, Eclipse usw. verwenden oder einen einfachen Editor wie Visual Studio Code, Sublime Text usw. verwenden. In diesem Artikel wird PHPStorm als Beispiel verwendet.
PHPStorm und PHP-Umgebung installieren: Während des Installationsvorgangs werden Sie aufgefordert, die PHP-Umgebung zu installieren, oder Sie können den Installationspfad auswählen selbst. Führen Sie nach Abschluss der Installation PHPStorm aus, öffnen Sie die Einstellungen und fügen Sie den PHP-Interpreter unter Sprachen & Frameworks > PHP hinzu.

MySQL installieren: MySQL herunterladen und installieren, die Datenbank erstellen und konfigurieren.

Composer installieren: Composer ist ein Abhängigkeitsmanager für PHP, der die PHP-Entwicklungsarbeit erheblich vereinfachen kann. Führen Sie den folgenden Befehl in der Befehlszeile aus, um Composer zu installieren:
  1. php -r "readfile('https://getcomposer.org/installer');" | php
  2. Nachdem die Installation abgeschlossen ist, verschieben Sie „composer.phar“ in einen global verfügbaren Pfad, z. B. /usr/bin/composer.
  3. 3. Erstellen Sie den API-Server
  4. Mit der oben genannten Entwicklungsumgebung können wir mit dem Aufbau des API-Servers beginnen.

Projekt erstellen: Erstellen Sie ein neues PHP-Projekt in PHPStorm und installieren Sie das Slim- oder Lumen-Framework mit Composer:

composer require slim/slim

oder #🎜 🎜#

composer require illuminate/routing illuminate/http
Hinweis: 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.
  1. Routen erstellen: Das Erstellen von Routen und Middleware ist in Slim- oder Lumen-Frameworks einfach. Erstellen Sie die Datei „routes.php“ im Stammverzeichnis, zum Beispiel:

$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:

    /hello/{ name}: Akzeptiert einen Namensparameter und gibt die Zeichenfolge „Hallo, Name“ zurück;
  1. /users: GET-Anfrage, ruft die Indexmethode von UsersController auf, gibt alle Benutzerdaten zurück; #/users: POST-Anfrage, rufen Sie die Create-Methode von UsersController auf, um einen neuen Benutzerdatensatz zu erstellen.

    Middleware erstellen: Durch das Hinzufügen von Middleware zum Routing können einige Vorverarbeitungs-, Filter-, Autorisierungs- und andere Funktionen erreicht werden. Erstellen Sie die Datei middleware.php im Stammverzeichnis, zum Beispiel:
$app->add(new JwtAuthMiddleware());
  • Hier wird eine JwtAuthMiddleware-Middleware definiert, um das Token und die Berechtigungen der OAuth2-Autorisierung zu überprüfen.
  • Erstellen Sie einen Controller: Erstellen Sie eine Controller-Datei im Stammverzeichnis, z. B. UsersController.php, um alle durch die Route definierten Methoden zu implementieren. Die Codestruktur des Controllers kann sich auf das folgende Beispiel beziehen:
      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;
          }
          
      }
    1. Hier wird ein UsersController-Controller definiert, einschließlich der Index- und Create-Methoden, die /users GET und /users POST entsprechen Anfragen bzw. Verwenden Sie Eloquent ORM, um die Benutzerdatentabelle (User::all() und $user->save()) zu bedienen und eine Antwort im JSON-Format zurückzugeben.

    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
    1. Ein integriertes PHP-Web Der Server wird hier gestartet und überwacht Port 8000. Greifen Sie im Browser auf http://localhost:8000/hello/world zu. Normalerweise sollte die Zeichenfolge „Hello, world“ zurückgegeben werden. Beim Zugriff auf http://localhost:8000/users sollten Daten im JSON-Format aller Benutzer zurückgegeben werden.
    4. OAuth2-Autorisierung

    Standardmäßig ist der API-Server nicht sicher, da jeder auf die Schnittstelle zugreifen und die Daten ändern kann. Um die API zu sichern, können wir die OAuth2-Autorisierung verwenden. OAuth2 ist ein Standardautorisierungsprotokoll, das Drittanbieteranwendungen den Zugriff auf geschützte Ressourcen eines bestimmten Benutzers auf einem Ressourcenserver autorisieren kann, ohne den Benutzernamen und das Passwort preiszugeben. In diesem Artikel verwenden wir das JWT-Framework von Firebase, um die OAuth2-Autorisierung zu implementieren.
    1. Firebase JWT-Framework installieren: Verwenden Sie Composer, um das Firebase JWT-Framework zu installieren:

    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:
      • getToken:接受客户端传递的email和password,生成access token并返回给客户端;
      • authenticate:接受客户端传递的access token,验证并返回用户对象。

      这里使用了JWT加密框架,将用户信息存储在token中,并使用HS256算法加密。

      1. 创建中间件:在根目录下创建中间件文件JwtAuthMiddleware.php,例如:
      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')获取到用户对象。

      1. 更新路由:在路由中加入OAuth2授权相关的路由和中间件。在routes.php文件中增加以下代码:
      $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!

    1. Stellungnahme:
      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