PHP API 框架开发的学习

标签: PHP 程序设计 API | 发表时间:2011-09-14 23:38 | 作者:标点符 郑小东
出处:http://www.biaodianfu.com

基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用。对外提供的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,除了以上的这些还需要做的有:

  1. 创建一个基本的API配置文件,并修改好程序的入口。
  2. 配置自己想要的REST URL结构。
  3. 记录接口中产生的错误。~ 

Related posts:

  1. PHP 5 curl Class
  2. Goo.gl PHP API
  3. PHP版记录蜘蛛爬行历史

相关 [php api 框架] 推荐:

PHP API 框架开发的学习

- 郑小东 - 标点符
基于互联网的应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用. 对外提供的API 调用使得站点之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值. 在开发API前,你需要的是给API设定一个框架,这个框架一定是要简单的且是容易扩展的. 下面就是用就来看看如何使用PHP来创建一个API.

PHP框架 Yaf

- Le - 开源中国社区最新软件
Yaf是一个C语言编写的PHP框架,Yaf 的特点: 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销. 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存. 更短的内存周转周期, 提高内存利用率, 降低内存占用率. 支持全局和局部两种加载规则, 方便类库共享.

【PHP框架CodeIgniter学习】Helloworld

- - CSDN博客推荐文章
在想做API的时候 ,在搜索发现大家都钟爱推荐 CodeIgniter 这个轻量级开发框架,于是乎就搜索了一番. 原来CodeIgniter 简称CI,开源框架,好像很多的CMS系统都是基于它进行二次开发的. 自己之前使用过的PHP框架有 ThinkPHP,PHPWind等,感觉有点复杂(可能是自己不大熟悉PHP的原因).

PHP的MVC开发框架 EaglePHP

- We_Get - 开源中国社区最新软件
EaglePHP是一个简单、开源、高效、易扩展、面向对象的PHP MVC开发框架,借鉴国外优秀框架的设计思路,分层的设计思想使独立开发成为可能,建立模型推动代码的重用. 写此框架的用意是与大家共同学习和交流. 框架特点: 1、数据库表曾、删、改、查,自动生成,支持二次开发. 2、支持session在Memcahe、database、file中的无缝切换.

2013 年最棒的 4 个 PHP 框架

- - 开源中国社区最新新闻
PHP 框架可以帮你编写简洁可重用的代码,遵循 MVC 模式,确保应用逻辑和展现分离. 有很多很多的框架各有千秋,有的性能好,有的文档全,还有的提供大量的内建功能等等. 这里我们罗列的 2013 年最好的 PHP 框架,其数据来源是根据 Google Trends  2012 的数据. 下图是关于 Yii、CodeIgniter、Zend 和 Cakephp 这四个框架的比较图表:.

2014 年 TOP 10 的 PHP 框架

- - 开源中国社区最新新闻
PHP 框架是非常有用的工具,可以帮助开发者构建干净整洁和结构化的 web 开发,同时也加快了创建和维护 web 应用的速度. 在这里,我们会介绍排名前 10 并且最受欢迎的 PHP 框架(排名不分先后). 这款可能是现在最受欢迎的 PHP 框架,Laravel 非常强大,而且很高雅,易于学习和使用.

WebGL 框架 API 横向评测 (Part 1)

- - HiWebGLHiWebGL
对于互联网来说,除了HTML5和CSS3之外,WebGL也是一项最有前途的正在进化的技术之一. 从简单的模型查看器到复杂的3D场景,由OpenGL ES驱动的网页结合CSS3和视频纹理也许会成为下一代互联网网页的主流. 由于应用广泛,富WebGL应用程序必须易于搭建和渲染,缩短响应时间,提供更好的可扩展性.

最佳PHP,HTML5和CSS框架大荟萃之二 HTML5框架

- - Web前端 - ITeye博客
这篇文章继续我们的框架大荟萃,如果你没有阅读前面的文章,请点击这里查看 PHP框架. 数以百万计的设计师和工程师都接受使用foundation框架来作为产品或者网站的前端设计. foundation是第一个支持响应式,语义化, 移动为先的开源框架. 最近Foundation5已经发布,作为当今最快速的发布版本工具,在很多方便比如开发产品和网站都很快.

[转][转]PHP开发框架流行度排名:Laravel居首

- - heiyeluren的blog(黑夜路人的开源世界)
来源: http://www.csdn.net/article/2014-01-03/2818006-PHP-framework-Laravel. 在项目开发中,一些架构和代码都是重复的,为了避免重复劳动,于是各种各样的框架诞生了. 在PHP开发中,选择合适的框架有助于加快软件开发,节约宝贵的项目时间,让开发者专注于功能的实现上.

Api Blocking

- - xiaobaoqiu Blog
4.RateLimiter实现限流. 接口限流是保证系统稳定性的三大法宝之一(缓存, 限流, 降级).. 本文使用三种方式实现Api限流, 并提供了一个用Spring实现的Api限流的简单Demo, Demo的git地址: https://github.com/xiaobaoqiu/api-blocking.