Maison > développement back-end > tutoriel php > Comment écrire une interface RESTful en PHP

Comment écrire une interface RESTful en PHP

高洛峰
Libérer: 2023-03-04 15:36:02
original
2087 Les gens l'ont consulté

Il s'agit d'un framework léger conçu pour le développement rapide d'interfaces RESTful. Si vous êtes comme moi et que vous en avez assez d'utiliser le framework MVC traditionnel pour écrire des microservices ou des interfaces API avec un front-end et un back-end séparés, et que vous ne supportez pas beaucoup de codage redondant (et CTRL-C/CTRL-V) pour une interface simple, alors, vous allez certainement adorer ce cadre !

Permettez-moi d'abord de vous donner un exemple
1. Écrivez HelloWorld.php et placez-le dans le répertoire spécifié par le framework (la valeur par défaut est le répertoire apis/au même niveau que index.php)

/**
 * @path("/hw")
 */
class HelloWorld
{
  /** 
   * @route({"GET","/"})
   */
  public function doSomething() {
    return "Hello World!";
  }
}
Copier après la connexion

2. Entrez http://votre-domaine/hw/
dans le navigateur et vous verrez : Hello World C'est aussi simple que cela, aucune configuration supplémentaire, aucun héritage ou combinaison n'est requis ! .
Ce qui s'est passé
En regardant HelloWorld.php, la particularité, ce sont les annotations (@path, @route Oui, le framework obtient les informations de routage et lie les entrées et les sorties via des annotations). Mais ne vous inquiétez pas des performances, les annotations ne seront analysées qu'une fois après la modification du fichier de classe. Plus de @ commentaires seront expliqués plus tard.

Regardez un exemple plus spécifique
Ceci est un exemple d'interface de connexion

/**
 * 用户权限验证
 * @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;
}
Copier après la connexion

Que peut-on faire d'autre

Gestion des dépendances (dépendance injection ),

Sortir automatiquement les documents d'interface (pas les documents de classe et de méthode de style doxgen, mais les documents décrivant les interfaces http)

Cache d'interface

hook

Accéder à la base de données avec ezsql
ezsql est un outil de création SQL simple orienté objet qui fournit des opérations SQL de base simples.
Interface

/** @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;
}
Copier après la connexion

Fichier de configuration

{
  {
    "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"     
    }
  },
}
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Pour plus d'articles sur la façon d'écrire des interfaces RESTful en PHP, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal