REST 與函式路由
您已經建立絕佳的 API。 此 API 並沒有太多用處,但確實存在,且這比現在還未建置 API 者所能說的用處還多。
移轉至 RESTful API
您有名為 CreateProduct、GetProducts、UpdateProduct 與 DeleteProduct 的端點。 以這種方式命名的端點遵循傳統 API 命名模式:動作/資源。
「動作/資源」命名模式適用於較小型的 API。 但是請記住,在此模擬中,Tailwind Traders 是一家網際網路巨頭。 產品 API 可能很快就會變得過於龐大。 例如,您可以想像您可能有一個稱為 "GetProductByIdAndQuantityAndDate" 的方法。這些類型的方法名稱不僅冗長,還會讓取用它們的程式碼看起來雜亂。 冗長的 API 名稱也會讓開發人員更難以了解如何在其專案中使用該 API。
您需要做的就是讓這個 API 更清楚明瞭。 為此,您將使用 REST 模式。
Azure Functions 路由與 HTTP 要求方法
在 Azure Functions,根據預設,任何 HTTP 觸發程序函式都會回應 GET 與 POST 要求。 其也會將您函式的 URL 設定為前置詞是 "/api" 之函式的名稱。您將設定這兩者都移至行動 RESTful 模式。
企業應用程式
此範例應用程式中的 Azure Functions v4 程式設計模型中的 API 的 HTTP 定義位於 ./api/src/index.ts
,並遵循下列模式:
const { app } = require('@azure/functions');
app.http('FunctionName',{
methods: ['GET', 'POST'],
authLevel: 'anonymous',
route: 'routeName',
handler: handlerFunction
});
處理常式函式與 HTTP 觸發程序的定義分開。 這在定義函式的方式上提供您許多彈性。 您可以在個別的檔案中定義處理常式函式,並將之匯入 index.ts
檔案。 此格式更容易維護或產生 OpenAPI 或 Swagger 文件。
較小的應用程式
使用應用程式的方法來指定 HTTP 方法,將處理常式程式碼直接整合到 app
呼叫中,可以更妥善地處理較小的應用程式。 您仍然可以分開處理常式函式或整合程式碼。
使用 app.get
方法來指定 HTTP 方法和處理常式函式。
const { app } = require('@azure/functions');
app.get('FunctionName', handlerFunction);
另一種替代格式,適用於具有單一函式的 [函式] 應用程式,是使用應用程式的方法來指定 HTTP 方法,將處理常式程式碼直接整合到 app
呼叫中。 例如:
const { app } = require('@azure/functions');
app.get('helloWorld',{
handler: (request: HttpRequest, context: InvocationContext) => {
return {
status: 200,
body: "Hello World"
}
}
}
路由參數
您也可以使用路由參數來定義接受參數的路由。 例如,下列程式碼會定義接受 name
參數的路由:
route: "products"
完整路由定義為:
app.http('GetProducts', {
methods: ['GET', 'POST'],
route: 'products', // <- route: /api/products
authLevel: 'anonymous',
handler: GetProducts
});
指定路由會變更在 URL 的 api 區段之後的所有內容。 在先前的設定檔中,GetProducts 函式的路由現在是 http://localhost:7071/api/products
。
您可以隨著路由一起傳遞參數。 參數的格式為 {parameterName}。 也就是說,若要將稱為 id
的參數傳遞到 product
端點,您可指定下列路由。
route: "products/{id}"
對 REST 有了這個新的認識,並知道如何在 Azure Functions 中實作 REST 之後,您現在可以將這種難以使用的 Products API 變成 RESTful API。 這就是您在下一個練習中所做的事。