4. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 4/36
(source: )
“API management is the process of creating
and publishing web APIs, enforcing their
usage policies, controlling access, nurturing
the subscriber community, collecting and
analyzing usage statistics, and reporting on
performance.
Wikipedia
6. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 6/36
R D 1R D 1
Fro n
Be r AP Bre y AP
/api/beers/{id}
/api/brewery/{id}/beers
Ne d an AP ke !
/api/brewery/
/api/brewery/{id}
Ne d an AP ke !
1. Build a few μ-services
2. Deploy them using Docker compose
3. Observations:
1. Each μ-service has a different address
2. Logic (e.g. security) is duplicated in each μ-service
10. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 10/36
(source: )
“Use Azure API Management as a turnkey
solution for publishing APIs to external and
internal customers. Quickly create
consistent and modern API gateways for
existing back-end services hosted
anywhere, secure and protect them from
abuse and overuse, and get insights into
usage and health.
Azure API Management
15. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 15/36
R D 2R D 2
1. Configure Kong:
1. Define a service that points to an upstream.
2. Define a route for that service.
3. Define an upstream with (1..n) target.
SERVICE
url: http://beer-api.upstream/
name: beer-api.service
UPSTREAM
name: beer-api.upstream
SERVICE
url: http://brewery-api.upstream/
name: brewery-api.service
UPSTREAM
name: brewery-api.upstream
TARGET
target: beer-api:9080
TARGET
target: brewery-api-1:9080
weight: 10
TARGET
target: brewery-api-2:9080
weight: 20
ROUTE
paths: [ /api/beer/*, /api/brewery/*/beers ]
methods: [ GET ]
ROUTE
paths: [ /api/brewery* ]
methods: [ GET ]
21. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 21/36
UU
In general:
Example (rate limiting):
curl http: kong:8001/services/<service name>/plugins
data "name=<plugin name>"
data "config.param=value"
curl http: kong:8001/services/beer api.service/plugins
data "name=rate limiting"
data "config.second=6"
24. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 24/36
R D 3R D 3
Fro n
Kon
Be r AP Bre y AP
Ne d an AP ke !
Aut t a co m us AP ke
As i n g o s to co m
Con r & g o s
p o d b Kon
Con r & g o s
p o d b Kon
1. Create consumer
2. Assign key to consumer
3. Assign group to consumer
4. Secure upstream API with key-auth and ACL plugin
26. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 26/36
SS
├── README.md # Documentation right?! ;-)
└── my plugin # Name of the plugin
├── api.lua # Administration interface for the plugin (REST)
├── daos.lua # DAO's for custom entities inside the plugin
├── handler.lua # Plugin logic, executed upon request
├── migrations # Database migrations
│ ├── cassandra.lua # for Cassandra
│ └── postgres.lua # for PostgreSQL
└── schema.lua # Schema for plugin config
27. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 27/36
II HANDLERHANDLER
local BasePlugin = require "kong.plugins.base_plugin"
local MyPluginHandler = BasePlugin:extend()
MyPluginHandler.PRIORITY = 1003
MyPluginHandler.VERSION = "0.2.0"
function MyPluginHandler:new()
MyPluginHandler.super.new(self, "my plugin")
end
function MyPluginHandler:access(conf)
MyPluginHandler.super.access(self)
kong.log.info("Hello from My Plugin!")
end
return MyPluginHandler
28. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 28/36
RR
Plugins can be invoked at various moments:
Kong startup
Serving SSL-certificate
Request rewriting
API or consumer unknown!
Before hitting upstream
After receiving all response headers from upstream
For each part of the response body
Could be multiple chunks!
After sending the last byte to the client
35. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 35/36
EE
Changing the configuration is easy and quick
Configuration using API's
Imperative scripting is hard to understand later on
declarative configuration, , or db-less mode
Upgrading 0.13 → 0.14.1 was pretty easy
Lack of GUI might disappoint business stakeholders
or can help
kongverge kongfig
konga kongdash
36. 03/04/2019 mastering-microservices
localhost:3000/?print-pdf#/ 36/36@mthmulders Amsterdam 2019
QQ
Sample code:
→ Help conference organisers: don't forget to rate this talk!
POST /api/1.0/questions
User-Agent: audience/1.0
Accept: application/vnd.infosupport.answer
Content-Type: application/vnd.infosupport.question
"So, how would you "
HTTP/1.1 200 OK
Content-Type: application/vnd.infosupport.answer
Date: Wed, Nov 21 2018 20 00 00 GMT+1
Server: Maarten/1.0
Via: kong/1.0.0
"Well, it depends on "
http://bit.ly/enterprise-beers