A REST és a függvényútvonalak
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/products
kö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.