热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FastD最佳实践一:构建API

FastD最佳实践一:构建APIFastD是一个专门针对API应用层而生的一个PHP应用框架,提供良好的中间件,路由以及支持swoole扩展运行
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"
}

执行流程

点击: FastD设计详解

实现第一个路由

1. 创建"控制器"

通过命令行

php bin/console controller:create {name}

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

手动创建

MeController.php

{public function me(ServerRequest $request){return json(['name' => '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"
}

完成最第一个路由。

给应用添加单元测试

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

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

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

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

给 API 添加公共缓存

何为公共缓存?

公共缓存的灵感来自于 varnish,当用户发起非 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 200
Host: localhost:9876
Connection: close
X-Powered-By: PHP/7.0.0
Content-Type: application/json; charset=UTF-8
X-Cache: ee4d94f352cb03116b61ce9158720ebf
Expires: 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 加速

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

config/server.php

/*** @author jan huang * @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 扩展配置参数。请参考: swoole配置

启动

php bin/server start

守护进程

php bin/server start -d

停止

php bin/server stop



推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文探讨为何Request对象的外观设计被认为是精妙的,重点在于其如何利用门面模式确保数据安全,同时保持系统的高效交互。 ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文详细介绍如何在 Apache 中设置虚拟主机,包括基本配置和高级设置,帮助用户更好地理解和使用虚拟主机功能。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文介绍了如何正确配置Ajax POST请求,以确保前端发送的数据能够被后端正确解析。重点在于前端JSON对象的键名需要与后端实体类的字段名严格匹配。 ... [详细]
author-avatar
Luuuuuuuucy22
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有