PHP API 框架開發的學習

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

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

API框架須要的特性json

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

API框架的組成部分api

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

  • Services
  • Hooks
  • Parsers

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

api-framework

 

一般的API請求URL以下:dom

http://www.domain.com/api/version/service/method/param_name/param_key.extension網站

Service

Service Class是API請求的控制器。這個Class包含了API可使用的method,因此Service Class會須要計算和處理數據。this

爲了使method能夠被請求,你須要將method設置爲公開(public),併爲service method設置請求類型(GET, POST, PUT, DELETE)。url

下面是一個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. 記錄接口中產生的錯誤。~
相關文章
相關標籤/搜索