# SERVICE API 详解
服务(SERVICE)实体,正如其名称所示,是您自己的UPSTREAM服务的抽象。服务的示例将会是数据转换微服务、计费API等。服务的主要属性是它的URL(在这里,Kong应该代理流量),它可以被设置为单个字符串,或者通过单独指定其协议、主机、端口和路径。服务与路由相关联(服务可以有许多与之相关联的路由)。路由是在Kong的入口点,并定义了匹配客户端请求的规则。一旦匹配了路由,Kong就会将请求委托给它的相关服务。
1、添加service
请求地址:/service/
请求方法:POST
请求主体:
| 属性 | 描述 |
|---|
| name(可选) | 服务名称. |
| protocol | 该协议用于与upstream通信。它可以是http(默认)或https。 |
| host | upstream服务器的主机。 |
| port | upstream服务器端口。默认为80 |
| path(可选) | 在向upstream服务器请求中使用的路径。默认为空。 |
| retries(可选) | 在代理失败的情况下执行的重试次数。默认值是5。 |
| connect_timeout(可选) | 建立到upstream服务器的连接的超时时间。默认为60000。 |
| write_timeout(可选) | 将请求发送到upstream服务器的两个连续写操作之间的超时时间。默认为60000。 |
| read_timeout(可选) | 将请求发送到upstream服务器的两个连续读取操作之间的超时时间。默认为60000。 |
| url(简写属性) | 将协议、主机、端口和路径立即设置成简短的属性。这个属性是只写的(管理API从来不“返回”url)。 |
2、查找service
请求地址:/services/{name or id}
请求方法:GET
PATH参数:
| 属性 | 描述 |
|---|
| name or id(必填) | 检索的唯一标识符或服务名称。 |
请求地址:/routes/{route id}/service
PATH方法:GET
请求参数:
| 属性 | 描述 |
|---|
| route id(必填) | 属于要检索的服务的路由的唯一标识符。 |
3、查找service列表
请求地址:/services/
请求方法:GET
请求参数:
| 属性 | 描述 |
|---|
| offset(可选) | 用于分页的游标。偏移量是定义列表中的位置的对象标识符。 |
| size(可选,默认是100 max是1000) | 每个页面返回的对象数量的限制。 |
4、更新service
请求地址:/services/{name or id}
请求方法:PATCH
PATH参数:
| 属性 | 描述 |
|---|
| name or id(必填) | 要更新的服务的id或name属性。 |
请求地址:/routes/{route id}/service
请求方法:PATCH
PATH参数:
| 属性 | 描述 |
|---|
| route id(必填) | 要更新服务的路由的id属性。 |
请求主体:同1、新增service
5、删除service
请求地址:/services/{name or id}
请求方法:DELETE
PATH参数:
| 属性 | 描述 |
|---|
| name or id(必填) | 要删除的服务的id或name属性。 |
# ROUTE路由
Route实体定义匹配客户端请求的规则。每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由。每一个匹配给定路线的请求都将被提交给它的相关服务。路由和服务的组合(以及它们之间的关注点分离)提供了一种强大的路由机制,可以在Kong中定义细粒度的入口点,从而引导你的访问到不同upstream服务。
ROUTE API 详解:
1、添加route
请求地址:/routes/
请求方法:POST
请求主体:
| 属性 | 描述 |
|---|
| protocols | 这条路线应该允许的协议列表。默认情况下,它是“http”、“https”,这意味着路由接受这两种方式。当设置为“HTTPS”时,HTTP请求会被请求升级到HTTPS。通过表单编码,符号是协议=http&协议=https。使用JSON,使用数组。 |
| methods(半可选) | 与此路由相匹配的HTTP方法列表。例如: ["GET", "POST"].至少有一个主机、路径或方法必须被设置。用表单编码参数是methods[]=GET&methods[]=OPTIONS。使用JSON,使用数组。 |
| hosts(半可选) | 与此路径匹配的域名列表。例如:example.com. 至少有一个主机、路径或方法必须被设置。用表单编码参数是 hosts[]=foo.com&hosts[]=bar.com。使用JSON,使用数组。 |
| paths(半可选) | 与此路径相匹配的路径列表。例如: /my-path.至少有一个主机、路径或方法必须被设置。用表单编码参数是 paths[]=/foo&paths[]=/bar. 使用JSON,使用数组。 |
| strip_path(可选) | 当通过一条路径匹配一条路径时,从upstream请求URL中剥离匹配的前缀。默认值为true。 |
| preserve_host(可选) | 当通过一个主机域名匹配一条路由时,在upstream请求头中使用请求主机头。默认设置为false,upstream主机头将是服务主机的主机头。 |
| service | 这条路线的服务是相关的。这是路由代理通信的地方。用表单编码参数是service.id=<service_id>。如果是JSON,则使用"service":{"id":"<service_id>"} |
2、检索route
请求地址:/routes/{id}
请求方法:GET
PATH参数:
3、route列表
请求地址:/routes
请求方法:GET
请求参数:
| 属性 | 描述 |
|---|
| offset(可选) | 用于分页的游标。偏移量是定义列表中的位置的对象标识符。 |
| size(可选,默认是100 max是1000) | 每个页面返回的对象数量的限制。 |
4、列出与service相关的route
请求地址:/services/{service name or id}/routes
请求方法:GET
PATH参数:
| 属性 | 描述 |
|---|
| service name or id(必填) | 要检索路由的服务的id或name属性。当使用这个API时,只有属于指定服务的路由才会被列出。 |
4、更新route
请求地址:/routes/{id}
请求方法:PATCH
PATH参数:
请求主体:同 1、添加route
4、删除route
请求地址:/routes/{id}
请求方法:DELETE
PATH参数:
# API对象
API对象描述了一个由Kong公开的API。当使用者从代理端口调用它时,Kong需要知道如何检索API。每个API对象必须指定主机、uri和方法的一些组合。Kong将把所有对API的请求委托给指定的upstream URL。
1、添加API
请求地址:/apis/
请求方法:POST
请求主体:
| 属性 | 描述 |
|---|
| name | API的名称. |
| hosts(半可选) | 指向您的API的逗号分隔的域名列表。例如:example.com。至少应该指定主机、uri或方法中的一个。 |
| uris(半可选) | 一个逗号分隔的uri前缀列表,指向您的API。例如: /my-path。至少应该指定主机、uri或方法中的一个。 |
| methods(半可选) | 一个以逗号分隔的HTTP方法列表,指向您的API。例如: GET,POST。至少应该指定主机、uri或方法中的一个。 |
| upstream_url | 指向您的API服务器的基本目标URL。这个URL将用于代理请求。例如: https://example.com. |
| strip_uri(可选) | 当通过一个URI前缀匹配一个API时,要从upstream URI中去掉匹配的前缀。默认值:真的。 |
| preserve_host(可选) | 当通过一个主机域名匹配一个API时,请确保请求主机头被转发到upstream服务。默认false,upstream主机头将从配置的upstream_url中提取出来。 |
| retries(可选) | 在代理失败的情况下执行的重试次数。默认值是5。 |
| upstream_connect_timeout(可选) | 建立连接到upstream服务的连接的超时时间。默认为60000。 |
| upstream_send_timeout(可选) | 在两个连续的写操作之间的时间间隔内,将请求发送到upstream服务的默认值为60000。 |
| upstream_read_timeout(可选) | 在两个连续读取操作之间的毫秒间隔,将请求发送到upstream服务的默认值为60000。 |
| https_only(可选) | 如果您希望仅通过HTTPS在适当的端口上提供API(默认情况下是8443),那么就可以启用该API。默认值:false。 |
| http_if_terminated(可选) | 在执行HTTPS通信时,考虑一下X-Forwarded-Proto header. 默认: false |
注:通用但非标准的HTTP头(通常,非标准的头域都是用“X-”开头)
X-Forwarded-Proto:记录一个请求一个请求最初从浏览器发出时候,是使用什么协议。因为有可能当一个请求最初和反向代理通信时,是使用https,但反向代理和服务器通信时改变成http协议,这个时候,X-Forwarded-Proto的值应该是https
2、检索API
请求地址:/apis/{name or id}
请求方法:GET
PATH参数:
| 属性 | 描述 |
|---|
| name or id(必填) | 要检索的API的唯一标识符或名称。 |
3、API列表
请求地址:/apis/
请求方法:GET
请求参数:
| 属性 | 描述 |
|---|
| id(可选) | 基于api id字段的过滤器。 |
| name(可选) | 基于api name字段的过滤器。 |
| upstream_url(可选) | 基于api upstream_url字段的过滤器。 |
| retries(可选) | 基于api retries字段的过滤器。 |
| offset(可选) | 用于分页的游标。偏移量是定义列表中的位置的对象标识符。 |
| size(可选,默认是100) | 每个页面返回的对象数量的限制。 |
4、更新API
请求地址:/apis/{name or id}
请求方法:GET
PATH参数:
| 属性 | 描述 |
|---|
| name or id(必填) | 要更新的API的唯一标识符或名称。 |
请求主体:与 1、添加API 请求主体相同
5、更新或创建API
请求地址:/apis/
请求方法:PUT
请求主体:与 1、添加API 请求主体相同
PUT接口的行为如下:如果请求的payload(AJAX请求)不包含实体的主键(APIs的id),则该实体将使用给定payload创建。如果请求的payload确实包含一个实体的主键,有效负载将“替换”给定主键指定的实体。如果主键不是现有实体的,则不会返回404。
6、删除API
请求地址:/apis/{name or id}
请求方法:DELETE
PATH参数:
| 属性 | 描述 |
|---|
| name or id(必填) | 唯一的标识符或要删除的API的名称。 |
# CONSUMER消费者
消费者对象表示服务的消费者或使用者。您既可以依赖于Kong作为主数据存储,也可以使用数据库映射消费者列表,以保持Kong和现有主数据存储之间的一致性。
CONSUMER API 详解:
1、创建Consumer
请求地址:/consumers/
请求方法:POST
请求表单参数:
| 属性 | 描述 |
|---|
| username(半可选) | 用户的唯一用户名。username或custom_id二选一。 |
| custom_id(半可选) | 消费者存储唯一ID - 用于现有数据库中的用户进行映射。username或custom_id二选一。 |
2、检索Consumer
请求地址:/consumers/{username or id}
请求方法:GET
PATH参数:
| 属性 | 描述 |
|---|
| username or id(必选) | 要检索的消费者的唯一标识符或用户名。 |
3、Consumer列表
请求地址:/consumers/
请求方法:GET
请求参数:
| 属性 | 描述 |
|---|
| id(可选) | 基于消费者id字段的过滤器。 |
| custom_id(可选) | 基于消费者custom_id字段的过滤器。 |
| username(可选) | 基于消费者username字段的过滤器。 |
| offset(可选) | 用于分页的游标。偏移量是定义列表中的位置的对象标识符。 |
| size(可选,默认是100) | 每个页面返回的对象数量的限制。 |
4、更新Consumer
请求地址:/consumers/{username or id}
请求方法:PATCH
PATH参数:
| 属性 | 描述 |
|---|
| username or id(必选) | 更新的唯一标识符或用户名。 |
请求主体:同1、添加Consumer
5、更新或创建Consumer
请求地址:/consumers/
请求方法:PUT
请求主体:同1、添加Consumer
6、删除Consumer
请求地址:/consumers/{username or id}
请求方法:DELETE
PATH参数:
| 属性 | 描述 |
|---|
| username or id(必选) | 更新的唯一标识符或用户名。 |
# 入门示例
先做一个最简单的转发。当访问8000端口时,自动转发到http://api01.bitspaceman.com:8000/news/qihoo
1、先创建两个Service:
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://api01.bitspaceman.com:8000/news/qihoo'
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=163-service' \
--data 'url=http://3g.163.com/touch/jsonp/sy/recommend'
2、然后,添加两个Route:
curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'hosts[]=news.com'
curl -i -X POST \
--url http://localhost:8001/services/163-service/routes \
--data 'paths[]=/news' \
--data 'hosts[]=news.com'
3. 最后访问一下:
http://192.168.1.12:8000?apikey=123
http://192.168.1.12:8000/news/0-9.html
# 入门示例
先来个简单的示例:
1、添加一个服务(service)
curl -i -X POST \
--url http://192.168.1.12:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org'
2、为服务添加一个路由(route)
说明:一个IP地址可以对应多个域名,服务器根据Host这一行中的值来确定本次请求的是哪个具体的网站。
curl -i -X POST \
--url http://192.168.1.12:8001/services/example-service/routes \
--data 'hosts[]=example.com'
3、使用Kong做一个请求转发
curl -i -X GET \
--url http://192.168.1.12:8000/ \
--header 'Host: example.com'