基於互聯網的應用正變得越來越普及,在這個過程中,有更多的站點將自身的資源開放給開發者來調用。對外提供的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請求。
這里是一個可以使用的使用的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的實例:
為了使上面的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的輸出格式示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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
-
&
gt
;
_data
,
true
)
;
}
}
|
框架會根據命名規則自動尋找適合的輸出格式。
要順利的開發一個PHP API,除了以上的這些還需要做的有:
- 創建一個基本的API配置文件,並修改好程序的入口。
- 配置自己想要的REST URL結構。
- 記錄接口中產生的錯誤。~