Heim > Backend-Entwicklung > PHP-Tutorial > So schreiben Sie eine RESTful-Schnittstelle in PHP

So schreiben Sie eine RESTful-Schnittstelle in PHP

高洛峰
Freigeben: 2023-03-04 15:36:02
Original
2087 Leute haben es durchsucht

Dies ist ein leichtes Framework, das für die schnelle Entwicklung von RESTful-Schnittstellen entwickelt wurde. Wenn Sie wie ich es satt haben, das traditionelle MVC-Framework zum Schreiben von Microservices oder API-Schnittstellen mit separatem Front-End und Back-End zu verwenden, und eine Menge redundanter Codierung (und STRG-C/STRG-V) nicht ertragen können, Wenn Sie eine einfache Benutzeroberfläche suchen, werden Sie diesen Rahmen auf jeden Fall lieben!

Lassen Sie mich zunächst ein Beispiel geben
1. Schreiben Sie HelloWorld.php und legen Sie es in dem vom Framework angegebenen Verzeichnis ab (der Standardwert ist das Verzeichnis apis/auf derselben Ebene wie index.php)

/**
 * @path("/hw")
 */
class HelloWorld
{
  /** 
   * @route({"GET","/"})
   */
  public function doSomething() {
    return "Hello World!";
  }
}
Nach dem Login kopieren

2. Geben Sie http://your-domain/hw/
in den Browser ein und Sie werden sehen: So einfach ist das, keine zusätzliche Konfiguration, keine Vererbung oder Kombination erforderlich .
Was ist passiert?
Rückblickend auf HelloWorld.php sind die Anmerkungen (@path, @route) das Besondere. Ja, das Framework erhält Routing-Informationen und bindet Eingabe und Ausgabe durch Anmerkungen. Aber machen Sie sich keine Sorgen um die Leistung, Anmerkungen werden nur einmal analysiert, nachdem die Klassendatei geändert wurde. Weitere @-Kommentare werden später erläutert.

Sehen Sie sich ein konkreteres Beispiel an
Dies ist ein Beispiel für eine Anmeldeschnittstelle

/**
 * 用户权限验证
 * @path("/tokens/") 
 */
class Tokens
{ 
  /**
   * 登录
   * 通过用户名密码授权
   * @route({"POST","/accounts/"}) 
   * @param({"account", "$._POST.account"}) 账号
   * @param({"password", "$._POST.password"}) 密码
   * 
   * @throws ({"InvalidPassword", "res", "403 Forbidden", {"error":"InvalidPassword"} }) 用户名或密码无效
   * 
   * @return({"body"})  
   * 返回token,同cookie中的token相同,
   * {"token":"xxx", "uid" = "xxx"}
   *
   * @return({"cookie","token","$token","+365 days","/"}) 通过cookie返回token
   * @return({"cookie","uid","$uid","+365 days","/"}) 通过cookie返回uid
   */
  public function createTokenByAccounts($account, $password, &$token,&$uid){
    //验证用户
    $uid = $this->users->verifyPassword($account, $password);
    Verify::isTrue($uid, new InvalidPassword($account));
    $token = ...;
    return ['token'=>$token, 'uid'=>$uid];
  } 
  /**
   * @property({"default":"@Users"})  依赖的属性,由框架注入
   * @var Users
   */
  public $users;
}
Nach dem Login kopieren

Was kann sonst noch getan werden

Abhängigkeitsmanagement (Abhängigkeit Injektion ),

Schnittstellendokumente automatisch ausgeben (keine Klassen- und Methodendokumente im Doxgen-Stil, sondern Dokumente, die http-Schnittstellen beschreiben)

Schnittstellencache

Hook

Zugriff auf die Datenbank mit ezsql
ezsql ist ein einfaches objektorientiertes SQL-Erstellungstool, das einfache grundlegende SQL-Operationen bereitstellt.
Schnittstelle

/** @path(/myclass) */
class MyClass{
 
  /**
  * @route({"GET","/do"})
  * @param({"arg0","$._GET.arg0"})
  */
  public doSomething($arg0){
    return Sql::select('xxx')->from('table_xxx')->where( 'xxx = ?', $arg0)->get($this->db);
  }
  /**
   * 依赖注入PDO实例
   * @property
   * @var PDO
   */
  public $db;
}
Nach dem Login kopieren

Konfigurationsdatei

{
  {
    "MyClass":{
      "properties":{
        "db":"@db1"  
      }
    },
  },
  "db1":{
    "singleton":true,
    "class":"PDO",
    "pass_by_construct":true,
    "properties":{
      "dsn":"mysql:host=127.0.0.1;dbname=xxx",
      "username":"xxxx",
      "passwd":"xxxx"     
    }
  },
}
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Weitere Artikel zum Schreiben von RESTful-Schnittstellen in PHP finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
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