一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

PHP API 框架開發(fā)的學(xué)習(xí) | IT癮

 quasiceo 2015-06-25

基于互聯(lián)網(wǎng)的應(yīng)用正變得越來越普及,在這個過程中,有更多的站點(diǎn)將自身的資源開放給開發(fā)者來調(diào)用。對外提供的API 調(diào)用使得站點(diǎn)之間的內(nèi)容關(guān)聯(lián)性更強(qiáng),同時(shí)這些開放的平臺也為用戶、開發(fā)者和中小網(wǎng)站帶來了更大的價(jià)值。

在開發(fā)API前,你需要的是給API設(shè)定一個框架,這個框架一定是要簡單的且是容易擴(kuò)展的。下面就是用就來看看如何使用PHP來創(chuàng)建一個API。

API框架需要的特性

  • 面向?qū)ο蠛徒Y(jié)構(gòu)化的代碼
  • 可修改的URL結(jié)構(gòu)
  • 創(chuàng)建多個版本
  • 使用Hook來擴(kuò)展框架API功能
  • API可連接數(shù)據(jù)庫表
  • 可定義多種輸出格式
  • 選擇方法請求類型(GET, POST, PUT, DELETE)

API框架的組成部分

API Framework主要由下面三中類型元素組成:

  • Services
  • Hooks
  • Parsers

在一個運(yùn)行的API中,每種類型的元素都有其自己的任務(wù)。下面就來詳細(xì)說說每一種元素。

通常的API請求URL如下:

http://www./api/version/service/method/param_name/param_key.extension

Service

Service Class是API請求的控制器。這個Class包含了API可以使用的method,所以Service Class會需要計(jì)算和處理數(shù)據(jù)。

為了使method可以被請求,你需要將method設(shè)置為公開(public),并為service method設(shè)置請求類型(GET, POST, PUT, DELETE)。

下面是一個Service Class的類,你可以設(shè)置默認(rèn)的請求方式為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 會在執(zhí)行力中執(zhí)行特定的點(diǎn)(如圖所示)。它可以讓你在服務(wù)使用前修改數(shù)據(jù)。下面是一些可能的hook示例:

  • 監(jiān)測用戶使用的API key是否在數(shù)據(jù)庫中存在。
  • 監(jiān)測特定的IP地址是否是允許使用服務(wù)或行為的。
  • 在文件或者數(shù)據(jù)庫中記錄用戶的請求日志。
  • 禁止特定的 IP使用API。
  • 限制IP每小時(shí)對API的請求數(shù)。

上面的只是一些示例,你可以發(fā)揮你的想象任意的添加Hook。下面是一個關(guān)于Hook的實(shí)例:

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是在服務(wù)執(zhí)行前執(zhí)行的,所以它可以用來校核用戶身份,查看是否有具體的權(quán)限。
  • HOOK_MODIFY_PARSER: 使用這個Hook可以在輸出數(shù)據(jù)解析前修改解析器。

如果要啟用鉤子則需要到程序的入口(endpoint.php)進(jìn)行修改。

Parsers

解析器用來轉(zhuǎn)化數(shù)據(jù)到特定的輸出格式的。例如是XML,機(jī)械器就是用定義的APi請求文件擴(kuò)展名來表示。例如:

  • /v1/helloworld.xml: 則使用Xml.php作為解析器
  • /v1/helloworld.json: 則使用Json.php作為解析器

你可以根據(jù)自己的需求定義標(biāo)準(zhǔn)的解析器,如:

  • 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);
}

}

框架會根據(jù)命名規(guī)則自動尋找適合的輸出格式。

要順利的開發(fā)一個PHP API,除了以上的這些還需要做的有:

  1. 創(chuàng)建一個基本的API配置文件,并修改好程序的入口。
  2. 配置自己想要的REST URL結(jié)構(gòu)。
  3. 記錄接口中產(chǎn)生的錯誤。~ 

Related posts:

  1. PHP 5 curl Class
  2. Goo.gl PHP API
  3. PHP版記錄蜘蛛爬行歷史


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产精品一区二区视频| 中文字幕人妻av不卡| 日韩一级一片内射视频4k | 国产成人午夜福利片片| 亚洲精选91福利在线观看| 国产一区二区三区成人精品| 久久精品国产亚洲av麻豆| 精品综合欧美一区二区三区| 欧美一区二区三区99| 伊人国产精选免费观看在线视频| 男女一进一出午夜视频| 国产成人午夜福利片片| 亚洲最新的黄色录像在线| 日本一级特黄大片国产| 99久久成人精品国产免费| 日本精品中文字幕人妻| 激情少妇一区二区三区| 国产高清精品福利私拍| 自拍偷拍一区二区三区| 日本高清加勒比免费在线| 一区二区福利在线视频| 九九热精彩视频在线免费 | 久久99夜色精品噜噜亚洲av| 91精品蜜臀一区二区三区| 亚洲国产天堂av成人在线播放| 国产精品免费不卡视频| 午夜福利大片亚洲一区| 精品熟女少妇一区二区三区| 久热香蕉精品视频在线播放| 欧美丰满大屁股一区二区三区| 丰满少妇被猛烈插入在线观看| 国产精品免费不卡视频| 中日韩美女黄色一级片| 亚洲国产天堂av成人在线播放| 四季av一区二区播放| 99久久国产精品亚洲| 日韩精品综合免费视频| 丰满少妇被猛烈插入在线观看| 果冻传媒在线观看免费高清| 色无极东京热男人的天堂| 久久99精品国产麻豆婷婷洗澡|