Encontrando seu caminho nas rotas do API Manager
Uma pergunta que surge rapidamente ao configurar o IAM (também conhecido como Kong Gateway) é quantas rotas devem ser criadas para alcançar todos os objetos de negócio em uma API IRIS.
Um erro comum é criar uma rota por objeto de negócio, multiplicando desnecessariamente o número de rotas.
Vejamos o exemplo da API Supply Chain Orchestrator Data Model:
/api/SC/scmodel/v1/objects /api/SC/scmodel/v1/objects/BOM /api/SC/scmodel/v1/objects/Carrier /api/SC/scmodel/v1/objects/Customer /api/SC/scmodel/v1/objects/DemandPlan /api/SC/scmodel/v1/objects/InventoryThreshold /api/SC/scmodel/v1/objects/Issue /api/SC/scmodel/v1/objects/LeadtimeVariant /api/SC/scmodel/v1/objects/Location /api/SC/scmodel/v1/objects/MfgOrder /api/SC/scmodel/v1/objects/Milestone /api/SC/scmodel/v1/objects/Product /api/SC/scmodel/v1/objects/ProductInventory /api/SC/scmodel/v1/objects/ProductSupplier /api/SC/scmodel/v1/objects/ProductionCapacity /api/SC/scmodel/v1/objects/PurchaseOrder /api/SC/scmodel/v1/objects/PurchaseOrderLine /api/SC/scmodel/v1/objects/RouteLeg /api/SC/scmodel/v1/objects/SCException /api/SC/scmodel/v1/objects/SLA /api/SC/scmodel/v1/objects/SalesOrder /api/SC/scmodel/v1/objects/SalesOrderLine /api/SC/scmodel/v1/objects/SalesShipment /api/SC/scmodel/v1/objects/SalesShipmentLine /api/SC/scmodel/v1/objects/ServiceSLA /api/SC/scmodel/v1/objects/ShipmentMilestone /api/SC/scmodel/v1/objects/ShipmentStop /api/SC/scmodel/v1/objects/ShipmentTracking /api/SC/scmodel/v1/objects/ShippingCost /api/SC/scmodel/v1/objects/Supplier /api/SC/scmodel/v1/objects/SupplyPlan /api/SC/scmodel/v1/objects/SupplyShipment /api/SC/scmodel/v1/objects/SupplyShipmentLine /api/SC/scmodel/v1/objects/TrackingService
Criar uma rota no API Manager para cada objeto de negócio seria entediante e fortemente desencorajador, além de não proteger você contra alterações durante uma atualização de versão.
Exemplo de um corte limpo (recomendado)
| Rota | Uso | Plugins |
|---|---|---|
/objects$ |
lista global de todos os objetos Cache |
Cache, limite de taxa |
/objects/{type} |
BOM / Transportadora / Cliente |
Monitoramento de Negócios |
O Kong não entende nativamente /objects/{type}.
👉 Isso precisa ser traduzido usando uma regex:
{type} = [^/]+
Começamos criando um serviço scmodel no Kong
### Create a new service in Kong for the SC Model application
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=scmodel' \
--data 'url=http://192.168.65.1:52880'Em seguida, adicionamos a rota para recuperar a lista de todos os objetos com $ para as rotas exatas:
### Create a route for the SC Model service Objects
curl -i -X POST \
--url http://localhost:8001/services/scmodel/routes \
--data 'name=scmodel-objects' \
--data 'paths=~/api/SC/scmodel/v1/objects$' \
--data 'strip_path=false'Depois, criamos uma rota genérica para todos os tipos de objeto usando [^/]+$ como a regex:
### Create a route for the SC Model for all object types
curl -i -X POST \
http://localhost:8001/services/scmodel/routes \
--data name=scmodel-object-type \
--data 'paths[]=~/api/SC/scmodel/v1/objects/[^/]+$' \
--data strip_path=falseSe você deseja monitorar ou gerenciar um tipo de objeto em particular com plugins diferentes ou diferentes autenticações, limites de taxa (rate-limits), etc., você deve criar uma rota específica para ele, utilizando regex_priority:
Se várias rotas de regex coincidirem, o Kong escolhe a de maior regex_priority; caso contrário... a ordem interna (não determinística).
Exemplo abaixo para os objetos Customer e Product :
### Create a route for the SC Model service Customer
curl -i -X POST \
http://localhost:8001/services/scmodel/routes \
--data name=scmodel-object-customer \
--data 'paths[]=~/api/SC/scmodel/v1/objects/Customer$' \
--data 'regex_priority=10' \
--data strip_path=false
### Create a route for the SC Model service Product
curl -i -X POST \
http://localhost:8001/services/scmodel/routes \
--data name=scmodel-object-product \
--data 'paths[]=~/api/SC/scmodel/v1/objects/Product$' \
--data 'regex_priority=10' \
--data strip_path=falseVocê também pode criar uma lista limitada de tipos de objetos usando a regex (A,B,C).
Exemplo abaixo para todas as rotas de vendas:
### Create a route for the SC Model Sales routes
curl -i -X POST \
http://localhost:8001/services/scmodel/routes \
--data name=scmodel-object-sales \
--data 'paths[]=~/api/SC/scmodel/v1/objects/(SalesOrder|SalesOrderLine|SalesShipment|SalesShipmentLine)$' \
--data 'regex_priority=10' \
--data strip_path=falseVocê pode encontrar a configuração da rota no portal do API Manager:
.png)
Para testar, basta fazer algumas chamadas para diferentes rotas:
### Get Object BOM
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/BOM'
### Get Object Carrier
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/Carrier'
### Get Object Customer
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/Customer'
### Get Object DemandPlan
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/DemandPlan'
### Get Object InventoryThreshold
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/InventoryThreshold'
### Get Object Issue
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/Issue'
### Get Object Product
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/Product'
### Get Object SalesOrder
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/SalesOrder'
### Get Object SalesOrderLine
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/SalesOrderLine'
### Get Object SalesShipment
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/SalesShipment'
### Get Object SalesShipmentLine
curl --user _SYSTEM:SYS 'http://localhost:8000/api/SC/scmodel/v1/objects/SalesShipmentLine'
Isso permite que você manipule seu objeto de negócio Customer com um nível de detalhe mais refinado do que outros tipos de objetos:
.png)
.png)
Analytics para todos os objetos de vendas :
.png)
Analytics dos outros tipos de objetos :.png)