当前位置:首页 >> 中药养生 >> 如何循序渐进地管理工作RESTful API的生命周期?

如何循序渐进地管理工作RESTful API的生命周期?

发布时间:2023-03-02

个带有专属ID的河段,以委以重任其多个路由器:

curl -H 'X-API-KEY: xyz' -X PUT -d ' # 1

{

"name": "Old API", # 2

"type": "roundrobin",

"nodes": {

"oldapi:8081": 1

}

}'

释义:

1. 可用upstreams偏移

2. 针对取而代之河段的有效载荷

由于河段只明白/hello,不明白/v1/hello,因此在转发至河段以后,我们仍只能重写发往交换机的浏览。APISIX可以通过应用程序来付诸此类切换和截取。下面,让我们创始一个运用于重写偏移的应用程序配有:

curl _configs/1 -H 'X-API-KEY: xyz' -X PUT -d ' # 1

{

"plugins": {

"proxy-rewrite": { # 2

"regex_uri": ["/v1/(.*)", "/$1"] # 3

}

}

}'

释义:

1. 可用plugin-configs偏移

2. 可用proxy-rewrite应用程序

3. 撤下重写版的从冠词

以从前我们就可以通过如下代码段,创始有重写版的路由器,以引导新创始的河段和应用程序配有:

curl -H 'X-API-KEY: xyz' -X PUT -d ' # 1

{

"name": "Versioned Route to Old API",

"methods": ["GET"],

"uris": ["/v1/hello", "/v1/hello/", "/v1/hello/*"],

"upstream_id": 1,

"plugin_config_id": 1

}'

下面展示出了新路由器的逻辑上图。

在此,我们已配有了有重写版和非重写版的两个路由器:

> curl apisix/hello

Hello world

> curl apisix/v1/hello

Hello world

将插件从非重写版偏移迁离到有重写版偏移

虽然我们给API统一指挥了重写版,但是插件也许仍不会可用原本的、非重写版的API。只不过,我们应有不能在插件不知情时就撤下丢弃原本的路由器,而只能通过HTTP的301情况下代码,让插件明白资源之从前从迁离到了。如下代码段展示出了如何通过配有重定向应用程序来初始化路由器:

curl -H 'X-API-KEY: xyz' -X PATCH -d '

{

"plugins": {

"redirect": {

"uri": "/v1$uri",

"ret_code": 301

}

}

}'

其运行结果如下:

>curl org/hello

301 Moved Permanently

301 Moved Permanently

openresty

>curl -L apisix:9080/hello # 1

Hello world

释义:

1. -L选项后面跟着重定向

根据规则,插件要么透明地可用到了取而代之下交会,要么送出301的情况下提示,可用取而代之API位置。

识别系统插件

您也许之从前提醒到,我们并不明白谁不会可用我们的API。因此,为了保证API在被复制到的步骤中不会不不会中不会断插件的可用,我选择了允许未申领的插件可复制到的数量。如果他们的总量到达了该允许,我们将返回类似于的HTTP 429情况下消息,要求他们启动申领。

当然,目从前尚未有完整版即用的应用程序可以付诸这一点。因此,我在APISIX中不会引入Lua变速箱,并用Lua改写出了其所的应用程序。您可以通过GitHub的链接----,来浏览其源码。当然,您也可以可用Python、WebAssembly或任何基于JVM的口语,来改写自己的应用程序。

我将通过如下步骤来启动应用程序的复制到:

1. 配有APISIX可用的目录:

apisix: extra_lua_path:/opt/apisix/.lua ?”

提醒:APISIX可以可用座落在/opt/apisix/驱动器下的任何Lua原作者。

2. 复制到应用程序:

由于APISIX赞同刺重载,因此它可以在必需重新启动的情况下添加额外的应用程序。

curl -H 'X-API-KEY: xyz' -X PUT

3. 给现有应用程序的配有打补丁:

最后,我们只能为应用程序本身系统升级专属的配有:

curl _configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '

{

"plugins": {

"proxy-rewrite": { # 1

"regex_uri": ["/v1/(.*)", "/$1"]

},

"unauth-limit": { # 2

"count": 1, # 3

"time_window": 60, # 3

"key_type": "var", # 4

"key": "consumer_name", # 4

"rejected_code": 429,

"rejected_msg": "Please register at org/register to get your API token and enjoy unlimited calls"

}

}

}'

释义:

1. 我们只能重复现有的应用程序配有。当然,APISIX团队即将大修这个bug。

2. 指向我们的应用程序。

3. 对于已通过申领的插件,应用程序可允许每60秒少于一个复制到。

4. 我不会在下一节中不会暗示到。

我们通过如下指示检验其否并能按期望运行:

>curl apisix:9080/v1/hello

Hello world

>curl apisix:9080/v1/hello

{"error_msg":"Please register at org/register to get your API token and enjoy unlimited calls"}

实际上不太也许如此。

插件申领

接着,我们只能为卖家(consumer)角色配有一个专属的插件下端应用程序。目从前,我们可以选用的此类插件下端应用程序有:API key、JWT、OpenId、LDAP、以及Keycloak等。在本例中不会,我们引入APISIX的key-auth应用程序。下面,让我们配有一个通过API key验证的卖家对象:

curl -H 'X-API-KEY: xyz' -X PUT -d '

{

"username": "johndoe", # 1

"plugins": {

"key-auth": { # 2

"key": "mykey" # 3

}

}

}'

释义:

1. 卖家的ID

2. 常规的应用程序

3. 有效逐个----mykey

提醒,其默认的标头为apikey,你也可以配有为其他,确切请求请见key-auth应用程序的相关文档。

我们用如下指示来验证其否并能按照我们的需求运行:

>curl -H 'apikey: mykey' apisix:9080/v1/hello

Hello world

>curl -H 'apikey: mykey' apisix:9080/v1/hello

Hello world

在投入生产生存环境中不会测试

至此,我们的改进版Hello world API便可以供插件复制到了。如您所见,部署一个取而代之、也许还包括潜在严重错误的应用重写版,通常不会给投入生产生存环境和其业务营收造成负面的制约。为了尽量减少此类几率,我们可以引入于在发布策略,即:再行对一小部份插件推出取而代之插件重写版,然后慢慢地集中于投入生产生存环境中不会的所有插件处。如果显现出了短路,那么新重写版只不会制约一小部份的插件群,我们并能及时回滚到原本的重写版。就API交换机而言,我们可以粘贴投入生产生存环境的容量到取而代之API下交会上,实以从前对插件几乎不产生制约的情况下,理应发现更多的缺陷。

在此,APISIX共享了proxy-mirror应用程序,可向其他路由器器递送粘贴的投入生产生存环境容量。对此,我们可以对应用程序配有做如下系统升级:

curl _configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '

{

"plugins": {

"proxy-rewrite": {

"regex_uri": ["/v1/(.*)", "/$1"]

},

"unauth-limit": {

"count": 1,

"time_window": 60,

"key_type": "var",

"key": "consumer_name",

"rejected_code": 429,

"rejected_msg": "Please register at org/register to get your API token and enjoy unlimited calls"

},

"proxy-mirror": {

"host": " api:8082" # 1

}

}

}'

释义:

1. APISIX将递送容量到该URL上。

根据上上图,我们可以监控和比较新和原本下交会,一旦发生严重错误,我们便可以大修严重错误,并重新部署。在此,我们首再行通过如下指示,创始一个指向取而代之API的河段:

curl -H 'X-API-KEY: xyz' -X PUT -d '

{

"name": "New API",

"type": "roundrobin",

"nodes": {

"newapi:8082": 1

}

}'

然后,我们可以可用traffic-split,来更换proxy-mirror应用程序:

curl _configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '

{

"plugins": {

"proxy-rewrite": {

"regex_uri": ["/v1/(.*)", "/$1"]

},

"unauth-limit": {

"count": 1,

"time_window": 60,

"key_type": "var",

"key": "consumer_name",

"rejected_code": 429,

"rejected_msg": "Please register at org/register to get your API token and enjoy unlimited calls"

},

"traffic-split": {

"rules": [

{

"weighted_upstreams": [ # 1

{

"upstream_id": 2,

"weight": 1

},

{

"weight": 1

}

]

}

]

}

}

}'

释义:

1. 作为演示,我们将50%的容量转发取而代之API。在想像生存环境中不会,您也许只不会配有少数的内部插件去可用取而代之下交会。

curl -L -H 'apikey: mykey' apisix:9080/hello

Hello world

curl -L -H 'apikey: mykey' apisix:9080/hello

Hello world (souped-up version!)

如果一切工作正常,我们可以将迅速增加的容量移至取而代之API。最终我们可以移除traffic split,将默认下交会从v1重定到v2上。

弃用原本的重写版

根据IETF的草案标准规范,我们可以基于特定的HTTP积极响应标头,来弃用HTTP的标头文件名 (请求请见----)。即:在API交换机的帮助下,我们可以通过配有路由器,来与合理性弃用和替代的重写版进行通信。为此,我们将可用由APISIX共享response-rewrite,来添加额外弃用标志标头,请求请见如下代码段:

curl -v _configs/1 -H 'X-API-KEY: xyz' -X PATCH -d '

{

"plugins": {

"proxy-rewrite": {

"regex_uri": ["/v1/(.*)", "/$1"]

},

"unauth-limit": {

"count": 1,

"time_window": 60,

"key_type": "var",

"key": "consumer_name",

"rejected_code": 429,

"rejected_msg": "Please register at org/register to get your API token and enjoy unlimited calls"

},

"response-rewrite": {

"headers": {

"Deprecation": "true",

"Link": "; rel="successor-version""

}

}

}

}'

curl -v -H 'apikey: mykey' apisix:9080/v1/hello

; rel="successor-version"

Hello world

小结

简介一下,我们按照如下流程向您展示出了如何通过有系统的步骤,来负责管理API的整个休眠。

1. 不要必要沾染您的API,而是在从前下端确立一个API交换机

2. 可用偏移、浏览变量、以及乞求标头给现有的API统一指挥重写版

3. 通过可用301情况下码,将插件从无重写版的下交会迁离到有重写版处

4. 识别系统和申领插件

5. 为了测试投入生产生存环境,我们再行粘贴容量,再次将小部份插件迁离到取而代之重写版上

6. 发布取而代之重写版

7. 通过标准积极响应标头来弃用原本的重写版

原文原文:Evolving your RESTful APIs, a step-by-step approach,作者:Nicolas Fränkel

北京妇科医院去哪家好
贵阳妇科检查多少钱
晕车怎么解决
英太青凝胶有哪些功效
哈尔滨妇科哪家医院最好
标签:
友情链接: