簡體   English   中英

在PHP中的RESTful API中進行路由

[英]Routing in RESTful API in PHP

我對PHP MVC有點熟悉。 說,我有一個像這樣的控制器:

class Customers{

    public function method1( param1, param2, param3, ..., param_n ){

    }
}

在我的bootstraping頁面中,我可以像這樣獲取瀏覽器URL:

$url = explode('/', filter_var(rtrim( $_GET['url'], '/' ), FILTER_SANITIZE_URL));

我做$controller = $url[0]$method = $url[1] 第二個索引后$url任何其他元素都是參數,可以收集到數組變量中,比如$params 然后我路由到相關的控制器方法和參數,如下所示:

call_user_func_array([$controller, $method], $params);

請注意:以上代碼僅供參考。 我總是在現實生活中做檢查。 這些檢查沒有在這里顯示,因此不要將上述示例用於嚴肅的項目。

現在,我想使用MVC模式實現RESTful API。 我所知道的:

  1. 沒有涉及瀏覽器,因此$_GET['url']不在其中。
  2. 端點是從$_SERVER['REQUEST_URI']
  3. 該方法是從$_SERVER['REQUEST_METHOD']

如何路由到端點,例如customers/{12345}/orders以獲取ID為12345的特定客戶的訂單?

我怎樣才能做到這一點?

實現您想要的最快捷方式就是使用FastRoute
但那里的樂趣在哪里:)

也就是說,我對你的前提感到困惑。 它是一個REST API,它將被其他一些代碼(如電話或第三方Web應用程序)使用,或者它是一個合適的網站,您只想獲得漂亮的URL?

因為如果它是前一種情況,那么制作花哨的URL解析是完全沒有意義的。 你應該閱讀這篇文章而不是亂七八糟的URL。 真正的REST API不需要花哨的URL解析。

我會假設你實際制作的是一個合適的網站,但有漂亮的網址。

首先,你必須實現一個路由機制,它采用一個正則表達式模式列表,再次匹配你提供的URL(你可以從$_GET['url']提取或者可能是$_SERVER[REQUEST_URI] (你的代碼實際上不會關注URL的收集位置......你不應該訪問函數/類中的超全局。

這個答案中解釋了這個的簡單版本。 我懶得重寫它全部= P.

第二個(也是高度可選的)部分是創建代碼,它將采用人類可讀的路由符號(例如: /users/{id|[0-9]+}作為示例)並將其轉換為正則表達式,可以通過您的路由機制被消耗

如果您決定使用人類可讀的符號,那么有兩個主要方向:

  • 內聯符號(參見上面的示例或FastRoute)
  • 帶有符號的配置文件(可能是JSON或YAML)

至於“最終結果可能如何”,您可以在這里查看代碼示例。 這將說明路由器公共接口的可用選項之一。

TL; DR

你的問題很模糊,很難理解對你有什么幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM