REST e rotas das funções
Criou uma API fantástica. Ainda não faz muita coisa, mas já existe, e isso é mais do que as pessoas que não estão a criar APIs neste momento podem dizer.
Migração para APIs RESTful
Tem pontos finais denominados CreateProduct, GetProducts, UpdateProduct e DeleteProduct. Os pontos de extremidade nomeados dessa forma seguem um padrão tradicional de nomenclatura de API: Ação/Recurso.
O padrão de nomenclatura Ação/Recurso é bom para APIs menores. Lembre-se, apesar de se tratar de uma simulação, a Tailwind Traders é um gigante da Internet. A API Produtos pode tornar-se difícil rapidamente. Por exemplo, você pode imaginar que pode ter um método chamado "GetProductByIdAndQuantityAndDate". Não só esses tipos de nomes de método são detalhados, mas eles fazem com que o código que os consome pareça confuso. Os nomes de API com muitas palavras também fazem com que seja mais difícil os programadores perceberem como utilizar a API nos projetos.
Assim, precisa de tornar esta API simples e intuitiva. Para isso, você usará o padrão REST.
Rotas das Funções do Azure e métodos de pedido HTTP
No Azure Functions, por padrão, qualquer função de gatilho HTTP responde às solicitações GET e POST. Ele também define a URL da sua função para o nome dessa função prefixada por "/api". Você configurará ambos para mover para um padrão RESTful de movimento.
Aplicações Empresariais
A definição HTTP para uma API no modelo de programação do Azure Functions v4 neste aplicativo de exemplo é encontrada em ./api/src/index.ts
e segue o padrão de:
const { app } = require('@azure/functions');
app.http('FunctionName',{
methods: ['GET', 'POST'],
authLevel: 'anonymous',
route: 'routeName',
handler: handlerFunction
});
A função do manipulador é separada da definição do gatilho HTTP. Isto permite-lhe muitas flexibilidades na forma como define as suas funções. Você pode definir a função do manipulador em um arquivo separado e importá-la para o index.ts
arquivo. Este formato seria mais fácil de manter ou gerar para documentação OpenAPI ou Swagger.
Aplicações mais pequenas
Aplicativos menores podem ser melhor atendidos integrando o código do manipulador diretamente na app
chamada, usando o método do aplicativo para especificar o método HTTP. Você ainda pode separar a função do manipulador ou integrar o código.
Use o app.get
método para especificar o método HTTP e a função manipulador.
const { app } = require('@azure/functions');
app.get('FunctionName', handlerFunction);
Outro formato alternativo, ideal para aplicativos Function com uma única função, é integrar o código do manipulador diretamente na app
chamada, usando o método do aplicativo para especificar o método HTTP. Por exemplo:
const { app } = require('@azure/functions');
app.get('helloWorld',{
handler: (request: HttpRequest, context: InvocationContext) => {
return {
status: 200,
body: "Hello World"
}
}
}
Parâmetros de rota
Você também pode usar parâmetros de rota para definir uma rota que aceite um parâmetro. Por exemplo, o código a seguir define uma rota que aceita um name
parâmetro:
route: "products"
A definição completa da rota é:
app.http('GetProducts', {
methods: ['GET', 'POST'],
route: 'products', // <- route: /api/products
authLevel: 'anonymous',
handler: GetProducts
});
Especificar uma rota altera tudo após a seção api da URL. No arquivo de configuração anterior, a rota para a função GetProducts agora http://localhost:7071/api/products
é .
Pode transmitir os parâmetros juntamente com a rota. Os parâmetros assumem a forma de {parameterName}. Isso significa que, para passar um parâmetro chamado id
para o product
ponto de extremidade, você deve especificar a rota a seguir.
route: "products/{id}"
Armado com esse novo conhecimento de REST e como implementá-lo no Azure Functions, agora você pode tornar essa pesada API de Produtos RESTful. É exatamente isso que vai fazer no próximo exercício.