博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FastD 最佳实践一: 构建 API
阅读量:5866 次
发布时间:2019-06-19

本文共 2773 字,大约阅读时间需要 9 分钟。

FastD 最佳实践一: 构建 API

FastD 是一个专门针对 API 应用层而生的一个 PHP 应用框架,提供良好的中间件,路由以及支持 swoole 扩展运行,从而具体良好的性能条件。

创建项目

composer create-project fastd/dobee api -vvv

创建一个为 API 的项目。

运行第一个程序

进入命令行模式

php -S localhost:9876 -t web

访问 localhost:9876

{    "msg":"hello dobee"}

执行流程

点击:

实现第一个路由

1. 创建"控制器"

通过命令行

php bin/console controller:create {name}

命令行会自动创建 CURD 多个操作方法,由开发者手动添加操作逻辑。

手动创建

MeController.php

'janhuang' ]); }}
2. 添加路由地址
get('/', 'WelcomeController@welcome');route()->get('/hello/{name}', 'WelcomeController@sayHello');route()->get('/who', 'MeController@me');
3. 调用
curl -i http://127.0.0.1:9876/who

response

{    "name": "janhuang"}

完成最第一个路由。

给应用添加单元测试

我仍热认为测试是一个非常重要的环节,也是一个优秀开发者一个重要品质之一。

如果其中涉及数据库测试,可以参考:

request('GET', '/'); $response = $this->app->handleRequest($request); $this->isSuccessful($response); }}

可以给你的应用API添加格式各样的测试,来验证程序的有效性。

给 API 添加公共缓存

何为公共缓存?

公共缓存的灵感来自于 ,当用户发起非 GET 请求的时候,进行缓存处理并返回(如果有的话),其他请求一律穿透,交给底层处理。

缓存也是一个前置中间件,使用方式与日常操作保持一致。

文档:

config/app.php

[ // code 'common.cache' => [\FastD\Middleware\CacheMiddleware::class] ],];

config/routes.php

get('/', 'WelcomeController@welcome');route()->get('/hello/{name}', 'WelcomeController@sayHello');route()->get('/who', 'MeController@me')->withMiddleware('common.cache');

完成配置后,请求路由地址

curl -i http://localhost:9876/whoHTTP/1.1 200Host: localhost:9876Connection: closeX-Powered-By: PHP/7.0.0Content-Type: application/json; charset=UTF-8X-Cache: ee4d94f352cb03116b61ce9158720ebfExpires: Tue, 08 Aug 2017 10:58:21 GMT

会产生 X-Cache 新的响应头,用于代表缓存生效。

Basic Auth

大部分 API 中,都需要对请求来源进行一定的鉴权处理,由于框架已经集成了简单的 Basic auth,使用方法与上述保持一致。

get('/', 'WelcomeController@welcome');route()->get('/hello/{name}', 'WelcomeController@sayHello');route()->get('/who', 'MeController@me')->withMiddleware(['basic.auth', 'common.cache']);

为 API Server 加速

众所周知, 为 PHP 提供了良好的性能体验和网络通信体验,而框架中也无缝整合 swoole,为框架、服务提供良好体验做了一个铺垫,现在,你只需要配置IP、端口、swoole常用配置,即可无痕启动以 swoole 服务器,为你的 API Server 进行加速处理。

config/server.php

* @copyright 2016 * * @link https://www.github.com/janhuang * @link http://www.fast-d.cn/ */return [ 'host' => 'http://'.get_local_ip().':9527', 'class' => \FastD\Servitization\Server\HTTPServer::class, 'options' => [ 'user' => 'nobody', 'group' => 'nogroup', 'pid_file' => __DIR__ . '/../runtime/pid/' . app()->getName() . '.pid', 'log_file' => __DIR__ . '/../runtime/logs/' . app()->getName() . '.pid', 'log_level' => 5, 'worker_num' => 10, 'task_worker_num' => 20, ], 'processes' => [ ], 'listeners' => [ ],];

get_local_ip 函数为了默认或者本地内网ip,如果你的API是对外开放的,请修改为您的外网ip或者 0.0.0.0

options 参数为 swoole 扩展配置参数。请参考:

启动
php bin/server start
守护进程
php bin/server start -d
停止
php bin/server stop

转载地址:http://hlnnx.baihongyu.com/

你可能感兴趣的文章
UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理
查看>>
4.2. PHP crypt()
查看>>
commandLink/commandButton/ajax backing bean action/listener method not invoked (转)
查看>>
RedHat 5.6_x86_64 + ASM + RAW+ Oracle 10g RAC (二)
查看>>
就是一个表格
查看>>
找回使用Eclipse删除的文件
查看>>
盘点5款Ubuntu监控工具解决CPU暴增问题
查看>>
移动开发Html 5前端性能优化指南
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
开发进度——4
查看>>
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>