基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用。对外提供的API 调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值。
在开发API前,你需要的是给API设定一个框架,这个框架一定是要简单的且是容易扩展的。下面就是用就来看看如何使用PHP来创建一个API。
API框架需要的特性
- 面向对象和结构化的代码
- 可修改的URL结构
- 创建多个版本
- 使用Hook来扩展框架API功能
- API可连接数据库表
- 可定义多种输出格式
- 选择方法请求类型(GET, POST, PUT, DELETE)
API框架的组成部分
API Framework主要由下面三中类型元素组成:
- Services
- Hooks
- Parsers
在一个运行的API中,每种类型的元素都有其自己的任务。下面就来详细说说每一种元素。
通常的API请求URL如下:
http://www.domain.com/api/version/service/method/param_name/param_key.extension
Service
Service Class是API请求的控制器。这个Class包含了API可以使用的method,所以Service Class会需要计算和处理数据。
为了使method可以被请求,你需要将method设置为公开(public),并为service method设置请求类型(GET, POST, PUT, DELETE)。
下面是一个Service Class的类,你可以设置默认的请求方式为GET,并且version method可以接受GET和POST请求。
<?php class MyApi_Service_Helloworld extends Api_Service_IService { public function __construct($api) { parent::__construct($api); // Set execute request methods $this->addAllowedMethod("execute", Api_Request::METHOD_POST); $this->addAllowedMethod("version", Api_Request::METHOD_POST); $this->addAllowedMethod("version", Api_Request::METHOD_GET); } public function execute($params, $config){ $this->code = 200; return "Hello world"; } public function version($params, $config){ $this->code = 200; return "Version 1.0"; } }
这里是一个可以使用的使用的API请求类型:
- Api_Request::METHOD_GET
- Api_Request::METHOD_POST
- Api_Request::METHOD_PUT
- Api_Request::METHOD_DELETE
如果你希望方法( method)名以驼峰式命名的话,如:
public myNewHelloWorld{}
那么你就需要在你的url中使用”my-new-hello-world”来请求这个方法(/v1/helloworld/my-new-hello-world.xml)。
Hook
Hook是一个可以绑定特定行为的类。哪些Hooks 会在执行力中执行特定的点(如图所示)。它可以让你在服务使用前修改数据。下面是一些可能的hook示例:
- 监测用户使用的API key是否在数据库中存在。
- 监测特定的IP地址是否是允许使用服务或行为的。
- 在文件或者数据库中记录用户的请求日志。
- 禁止特定的 IP使用API。
- 限制IP每小时对API的请求数。
上面的只是一些示例,你可以发挥你的想象任意的添加Hook。下面是一个关于Hook的实例:
class Api_Hook_BlockIp extends Api_Hook_IHook { public function execute() { // Current called service $service = func_get_arg(0); // Get config array $config = $this->api->getConfig(); // Stop if blocks is not configured if(!isset($config['block'])) return; // Convert comma separated list to array $blocked = explode(',', $config['block']); // Check if the user IP is blocked // If blocked show him a message if(in_array($_SERVER['REMOTE_ADDR'], $blocked)){ throw new Api_Error('Spammer', 'Your IP address is blocked.'); } } }
为了使上面的Hook可以正常的工作,你需要在config文件中添加这样一行:
block = ip1,ip2,ip3
接下来就是讲解不同种类的hook了:
- HOOK_CONFIG_LOADED: 这个hook是在加载了配置(config)请求的。他可以用来修改或添加一些配置信息
- HOOK_BEFORE_SERVICE_EXECUTE: 这个hook是在服务执行前执行的,所以它可以用来校核用户身份,查看是否有具体的权限。
- HOOK_MODIFY_PARSER: 使用这个Hook可以在输出数据解析前修改解析器。
如果要启用钩子则需要到程序的入口(endpoint.php)进行修改。
Parsers
解析器用来转化数据到特定的输出格式的。例如是XML,机械器就是用定义的APi请求文件扩展名来表示。例如:
- /v1/helloworld.xml: 则使用Xml.php作为解析器
- /v1/helloworld.json: 则使用Json.php作为解析器
你可以根据自己的需求定义标准的解析器,如:
- XML
- CSV
- JSON
- Printr
- TXT
下面是一种类似PHP中print_r的输出格式示例:
class Api_Parser_Printr extends Api_Parser_IParser { /** * Content type * @var string */ public $content_type = "text/plain"; /** * Parse to XML * * @return string */ public function parse(){ return print_r($this->_data, true); } }
框架会根据命名规则自动寻找适合的输出格式。
要顺利的开发一个PHP API,除了以上的这些还需要做的有:
- 创建一个基本的API配置文件,并修改好程序的入口。
- 配置自己想要的REST URL结构。
- 记录接口中产生的错误。~
相关推荐
ThinkPHP5在保持快速开发和大道至简的核心理念不变的同时,PHP版本要求提升到5.4,对已有的CBD模式做了更深的强化,优化核心,减少依赖,基于全新的架构思想和命名空间实现
开发简单:一个API就是一个函数,你只需要将数据返回,框架会自动将数据进行转换并输出。 易与拓展:LyAPI使用Composer管理依赖包,你可以下载自己需要的功能。 自动加载:LyAPI遵循PSR-4规范,并使用autoload,避免...
高仿看云API开发文档中心框架模板,非常好看,可以嵌入网站系统,也可以单独使用。
PhpBoot是专为开发RESTful API 设计的PHP框架。它设计的初衷是尽可能简化API开发
PHP Framework ThinkPHP——为API开发而设计的高性能PHP框架。基于PHP8.0+重构 升级PSR依赖;依赖think-orm3.0版本;6.0/6.1无缝升级
一款轻量级PHP API开发框架
FastD 是一个支持 Swoole 的轻量级 Web 开发框架,可适用于对性能有要求的 API 场景,并且灵活的扩展性可以让开发者们更容易地建造自己的服务 (基于Swoole), 要求 PHP >= 5.6 ext-curl ext-pdo ext-swoole 文档 ...
VueCMF的PHP版后端API核心框架,基于ThinkPHP6+Casbin开发。可用于快速开发OA、CMS、CRM、WMS、OMS、ERP等管理系统,开发简单、高效易用,极大减少系统的开发周期和研发成本!甚至不用写一行代码使用VueCMF就能设计...
Slim是一款 PHP 微框架,可以帮助你快速编写简单但功能强大的 web 应用和 API
VueCMF内容管理快速开发框架v2.1(PHP版后端API),一款完全开源免费的内容管理快速开发框架。采用前后端分离模式搭建,基于ThinkPHP6开发。可用于快速开发CMS、CRM、WMS、OMS、ERP等管理系统,开发简单、高效易用,极...
API Platform 是下一代PHP Web框架,旨在轻松创建API优先的项目,而不会影响可扩展性和灵活性。
目录结构: app --应用目录,放应用逻辑代码,可分二级目录 extend --公用类存放目录,放置一些公用的class,已做自动加载,文件名与类名一致。参照TP gen --解释器目录,可对不同类型后缀请求单独解释。...
Wizard是基于Laravel开发框架开发的一款开源项目(API)文档管理工具。
我们提供了完善的phpWeChat二次开发文档,便于开发者学习与查阅。 5、高度集成微信接口 phpWeChat高度集成了微信公共号的自动回复、菜单管理、素材管理、模板消息、粉丝管理、微信支付等常用接口,您只需一个函数或2...
OhCrud是一个PHP微框架,可帮助您快速编写简单而强大的应用程序并创建API。 它的核心是提供与MySQL或SQLITE交互的基本创建读取更新删除方法。
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发Node.js、C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
easyPHP-Swoole 专为API而生,是一款常驻内存化的PHP开发框架
MyQEE PHP Framework 是基于PHP5开发的完美支持HMVC模式的PHP框架,支持多项目开发。MyQEE借鉴了国外优秀框架的设计思路,优雅、实用的代码是我们追求的目标。 MyQEE具有以下几大特点: 优越的扩展性,支持多项目...
tpframe PHP开发框架是一个为快速开发api接口、wap站、微信站、pc站而生的PHP开发框架。 TPFrame保持了ThinkPHP5原有的所有特性,在ThinkPHP动力驱动模式下做了进一步的开发,对CBD模式做了强化,tpframe框架功能...
VueCMF内容管理快速开发框架v2.1(PHP版后端API),一款完全开源免费的内容管理快速开发框架。采用前后端分离模式搭建,基于ThinkPHP6开发。可用于快速开发CMS、CRM、WMS、OMS、ERP等管理系统,开发简单、高效易用,极...