PHP API 框架开发

最近一直在写一些api让别人去调用来获取我们公司网站的数椐,但一直没想过api的构架,以后可以会有更多的api需求,所以需要构架一下了。

基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用。对外提供的API 调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值。 在开发API前,你需要的是给API设定一个框架,这个框架一定是要简单的且是容易扩展的。下面就是用就来看看如何使用PHP来创建一个API。 API框架需要的特性 面向对象和结构化的代码 可修改的URL结构 创建多个版本 使用Hook来扩展框架API功能 API可连接数据库表 可定义多种输出格式 选择方法请求类型(GET, POST, PUT, DELETE) API框架的组成部分 API Framework主要由下面三中类型元素组成: Services Hooks Parsers 在一个运行的API中,每种类型的元素都有其自己的任务。下面就来详细说说每一种元素。

![在此输入图片描述][1]

通常的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{ public $content_type = "text/plain"; public function parse(){ return print_r($this->_data, true); } } 框架会根据命名规则自动寻找适合的输出格式。 要顺利的开发一个PHP API,除了以上的这些还需要做的有: 创建一个基本的API配置文件,并修改好程序的入口。 配置自己想要的REST URL结构。 记录接口中产生的错误。~ [1]: http://static.oschina.net/uploads/space/2013/0518/141648_S9Zf_137226.jpg

转载于:https://my.oschina.net/u/137226/blog/131805

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值