PHP API 框架開發的學習


基於互聯網的應用正變得越來越普及,在這個過程中,有更多的站點將自身的資源開放給開發者來調用。對外提供的API 調用使得站點之間的內容關聯性更強,同時這些開放的平台也為用戶、開發者和中小網站帶來了更大的價值。

在開發API前,你需要的是給API設定一個框架,這個框架一定是要簡單的且是容易擴展的。下面就是用就來看看如何使用PHP來創建一個API。

API框架需要的特性

  • 面向對象和結構化的代碼
  • 可修改的URL結構
  • 創建多個版本
  • 使用Hook來擴展框架API功能
  • API可連接數據庫表
  • 可定義多種輸出格式
  • 選擇方法請求類型(GET, POST, PUT, DELETE)

API框架的組成部分

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

  • Services
  • Hooks
  • Parsers

在一個運行的API中,每種類型的元素都有其自己的任務。下面就來詳細說說每一種元素。

api-framework

 

通常的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的輸出格式示例:

框架會根據命名規則自動尋找適合的輸出格式。

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

  1. 創建一個基本的API配置文件,並修改好程序的入口。
  2. 配置自己想要的REST URL結構。
  3. 記錄接口中產生的錯誤。~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM