A REST és a függvényútvonalak

Befejeződött

Csodálatos API-t alkotott. Nem képes sokra, de mégiscsak létezik, ez pedig több annál, amit az API-kat nem készítő emberek elmondhatnak.

Migrálás RESTful API-kba

Létrehozta a CreateProduct, a GetProducts, az UpdateProduct és a DeleteProduct végpontot. Az így elnevezett végpontok egy hagyományos API-elnevezési mintát követnek: Művelet/Erőforrás.

A művelet-/erőforrás-elnevezési minta a kisebb API-k esetében megfelelő. Ne feledjük azonban, hogy a szimulációban szereplő Tailwind Traders internetes óriás. A Products API gyorsan kezelhetetlenné válhat. Tegyük fel például, hogy van egy "GetProductByIdAndQuantityAndDate" nevű metódusa. Az ilyen típusú metódusnevek nem csak részletesek, hanem az őket használó kódot is zsúfoltnak tűnnek. A tömör API-nevekből viszont a fejlesztők tudják nehezen megállapítani, hogy hogyan használják az API-t a projektjeikben.

Meg kell oldania, hogy ez az API egyértelmű és intuitív legyen. Ehhez a REST mintát fogja használni.

Azure Functions-útvonalak és HTTP-kérési metódusok

Az Azure Functionsben alapértelmezés szerint minden HTTP-eseményindító függvény válaszol a GET és POST kérelmekre. A függvény URL-címét az "/api" előtagú függvény nevére is beállítja. Mindkettőt konfigurálja úgy, hogy áthelyezési RESTful-mintára váltson.

Vállalati alkalmazások

Az Azure Functions v4-es programozási modelljében található API HTTP-definíciója ebben a mintaalkalmazásban a ./api/src/index.ts következő mintát követi:

const { app } = require('@azure/functions');

app.http('FunctionName',{
    methods: ['GET', 'POST'], 
    authLevel: 'anonymous', 
    route: 'routeName',
    handler: handlerFunction
});

A kezelőfüggvény elválasztva van a HTTP-eseményindító definíciójától. Ez sok rugalmasságot biztosít a függvények definiálásához. A kezelőfüggvényt külön fájlban határozhatja meg, és importálhatja a index.ts fájlba. Ez a formátum könnyebben karbantartható vagy létrehozható az OpenAPI- vagy Swagger-dokumentációhoz.

Kisebb alkalmazások

A kisebb alkalmazásokat jobban kiszolgálhatja, ha a kezelőkódot közvetlenül a app hívásba integrálja, és az alkalmazás metódusával adja meg a HTTP-metódust. Továbbra is elkülönítheti a kezelőfüggvényt, vagy integrálhatja a kódot.

A metódus használatával app.get adja meg a HTTP-metódust és a kezelőfüggvényt.

const { app } = require('@azure/functions');

app.get('FunctionName', handlerFunction);

Egy másik alternatív formátum, amely ideális egyetlen függvényt használó függvényalkalmazásokhoz, a kezelőkód közvetlenül a app hívásba integrálható az alkalmazás metódusával a HTTP-metódus megadásához. Példa:

const { app } = require('@azure/functions');

app.get('helloWorld',{
    handler: (request: HttpRequest, context: InvocationContext) => {
        return {
            status: 200,
            body: "Hello World"
        }
    }
}

Útvonalparaméterek

Az útvonalparaméterekkel olyan útvonalat is meghatározhat, amely elfogadja a paramétert. A következő kód például egy paramétert elfogadó name útvonalat határoz meg:

route: "products"

A teljes útvonaldefiníció a következő:

app.http('GetProducts', {
    methods: ['GET', 'POST'],
    route: 'products',          // <- route: /api/products
    authLevel: 'anonymous',
    handler: GetProducts
});

Az útvonal megadása mindent megváltoztat az URL API-szakasza után. Az előző konfigurációs fájlban a GetProducts függvényhez vezető útvonal most a http://localhost:7071/api/productskövetkező.

Az útvonallal paramétereket is átadhat. A paraméterek {parameterName} formában lesznek. Ez azt jelenti, hogy a végpontnak hívott id paraméter átadásához product a következő útvonalat kell megadnia.

route: "products/{id}"

A REST új ismeretével és az Azure Functionsben való implementálásával most már reSTful-ként is használhatja ezt a nem megfelelő Products API-t. Pontosan ezt teheti meg a következő gyakorlatban.