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!"; } }
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; }
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; }
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" } }, }
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 !