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。 這就是您在下一個練習中所做的事。