ayeaye / api
简单但强大的API框架
Requires
- php: ^5.5 || ^7.0
- ayeaye/formatters: ^1.0.0
- psr/log: ^1.0.0
Requires (Dev)
- nikic/php-parser: ^1.0
- pdepend/pdepend: ^2.0
- phpdocumentor/phpdocumentor: ^2.8
- phploc/phploc: ^2.0
- phpmd/phpmd: ^2.2
- phpunit/phpunit: ^4.5
- sebastian/phpcpd: ^2.0
- squizlabs/php_codesniffer: ^2.2
This package is not auto-updated.
Last update: 2024-09-14 15:16:35 UTC
README
[] (https://php.ac.cn/) [
] (https://raw.githubusercontent.com/AyeAyeApi/Api/master/LICENSE.txt) [
] (https://packagist.org.cn/packages/ayeaye/api) [
] (https://travis-ci.org/AyeAyeApi/Api/branches)
Aye Aye API 是一个用 PHP 编写的微型框架,用于构建 API。它设计得易于使用,开发速度快,可从小型微服务扩展到世界吞噬的巨人。
安装
创建一个项目并包含 Aye Aye。
composer init --require="ayeaye/api ^1.0.0" -n
composer install
快速入门指南
当使用 Aye Aye 时,你几乎所有的工作都会在控制器类中完成。
这是我们的通用 Hello World 控制器
<?php // HelloWorldController.php use AyeAye\Api\Controller; class HelloWorldController extends Controller { /** * Yo ho ho * @param string $name Optional, defaults to 'Captain' * @return string */ public function getAyeAyeEndpoint($name = 'Captain') { return "Aye Aye $name"; } }
控制器包含端点和子控制器。上面的控制器有一个单一的端点 hello,它将响应 HTTP GET 请求。这体现在名称上,其形式为 [verb][Name]Endpoint。
端点接受一个参数,name,如果未提供其他值,则默认为 'Captain'。返回值是一个字符串。
API需要一个入口点,这将放在 index.php 中
<?php // index.php require_once '../vendor/autoload.php'; require_once 'HelloWorldController.php'; use AyeAye\Api\Api; $initialController = new HelloWorldController(); $api = new Api($initialController); $api->go()->respond();
首先我们获取 composer 的自动加载器,以及我们的控制器(我们还没有将其添加到自动加载器中)。我们实例化我们的 HelloWorldController,并将其传递给 Api 对象的构造函数。这成为我们的初始控制器,这是 Aye Aye 需要知道的唯一一个,我们稍后会解释原因。
最后,->go() 方法产生一个响应对象,我们可以用 ->respond() 来响应。
我们可以使用 PHP 内置的服务器来测试它
$ php -S localhost:8000 index.php & $ curl localhost:8000/aye-aye # {"data":"Aye Aye Captain"} $ curl localhost:8000/aye-aye?name=Sandwiches # {"data":"Aye Aye Sandwiches"}
注意,字符串已被转换为序列化的对象(默认为 JSON,但可以通过 Accept 头或文件后缀选择格式)。
这测试了我们的端点,但如果只是查询 API 的根会发生什么。
$ curl localhost:8000 # {"data":{"controllers":[],"endpoints":{"get":{"aye-aye":{"summary":"Yo ho ho","parameters":{"name":{"type":"string","description":"Optional, defaults to 'Captain'"}},"returnType":["string"]}}}}}
让我们更仔细地看看返回的字符串。
{
"data": {
"controllers": [],
"endpoints": {
"get": {
"aye-aye": {
"summary": "Yo ho ho",
"parameters": {
"name": {
"type": "string",
"description": "Optional, defaults to 'Captain'"
}
},
"returnType": [
"string"
]
}
}
}
}
}
如你所见,它是对我们的控制器结构的说明。我们没有写任何超出预期之外的东西,这对于后端开发人员和 API 的消费者来说都是有意义的。
完成工作后,不要忘记关闭服务器。
$ fg
^C
为什么你应该使用它?
在Aye Aye上进行开发简单、简洁且逻辑清晰。Aye Aye处理请求并将它们发送到适当控制器上的适当端点。这个端点只是一个方法,接受一系列参数并返回一些数据。Aye Aye会计算出如何在请求中找到这些参数,并在返回时格式化数据。它还支持多种数据格式,并会根据用户请求自动切换。
没有冗余。您不需要学习新的数据库工具,或日志接口(假设您知道[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md),您应该知道)或身份验证方法。Aye Aye只提供路由、请求解析和响应处理。您可以随心所欲地使用其他工具。
如果您遵循PSR-4,那么您的API将非常类似于您的目录结构,使维护变得轻而易举。
Aye Aye了解自己。它知道任何控制器上可用的端点和子控制器,通过阅读doc-block注释中的文档,它可以告诉用户这些端点的作用。您只需编写一次文档,Aye Aye就会读取它并告诉用户这些端点的作用以及它们接受的参数。
默认情况下,它可以以json(默认)和xml格式读取和写入数据,尽管可以轻松添加更多格式。它还可以读取GET、POST和HEADER,并对URL别名进行参数化。这些来源的数据会自动传递到您的方法中。
快速入门说明
Aye Aye最重要的强大功能是其控制器。控制器做两件事。它们提供端点,并访问其他控制器。
控制器是扩展AyeAye\Api\Controller的类
端点是控制器上的方法,命名方式为[verb][name]Endpoint(...)
[verb]是等待的HTTP动词。[name]是端点的名称。Endpoint实际上是单词“端点”。这有助于我们了解我们正在处理什么。
您可以为方法定义任何喜欢的参数,Aye Aye会自动为您填充。
控制器还可以通过具有如下命名方式的方法引用其他控制器:[name]Controller()
这些方法应返回一个控制器对象,这就是Aye Aye导航API的方式。
“Hello World”控制器
上面我们编写了一个控制器来输出“Hello”。
<?php // HelloWorldController.php use AyeAye\Api\Controller; class HelloWorldController extends Controller { /** * Yo ho ho * @param string $name Optional, defaults to 'Captain' * @return string */ public function getAyeAyeEndpoint($name = 'Captain') { return "Aye Aye $name"; } }
这个控制器中的唯一方法就告诉您所有需要知道的内容。
- 它会响应发送到hello端点的GET请求。
- 它接受一个参数,'name',默认为“Captain”。
- 它返回一个字符串。
那么我们是如何从这些内容,到使用curl发送和接收数据的呢?
当我们创建API对象时,我们传递了一个HelloWorldController对象作为参数,这告诉API这是我们起点。Aye Aye识别getAyeEndpoint作为通过GET请求触发的名为“aye”的端点。
您会注意到我们使用了PHP Doc Block来解释方法的作用。这非常重要。这不仅告诉其他开发者这个端点做什么……还告诉API的用户,他们会以同样的方式使用它。
在快速入门指南中,我们查询了“/”,您会看到API告诉您它有一个名为“aye”的GET端点,它接受一个名为“name”的字符串参数,它使用您为该方法制作的文档来描述所有这些内容!
子控制器
显然,只有一个控制器是非常无用的。要从一个控制器切换到下一个控制器,我们创建一个[name]Controller()方法。这个方法应该返回一个继承自Controller的对象。为了在我们的应用程序快速启动应用程序中演示这一点,我们只需返回$this。
<?php // HelloWorldController.php use AyeAye\Api\Controller; class HelloWorldController extends Controller { /** * Yo ho ho * @param string $name Optional, defaults to 'Captain' * @returns string */ public function getAyeAyeEndpoint($name = 'Captain') { return "Aye Aye $name"; } /** * lol... * @returns $this */ public function ayeController() { return $this; } }
现在当我们的应用程序启动并开始运行时!
$ php -S localhost:8000 public/index.php & curl localhost:8000/aye/aye/aye/aye/aye-aye?name=Aye%20Aye # {"data":"Aye Aye Aye Aye"}
贡献
Aye Aye是一个开源项目,欢迎贡献。
问题
要报告问题,请在GitHub问题跟踪器上打开一个Issue。
变更
给我发送Pull Request。给我发很多。