如何循序渐进地管理工作RESTful API的生命周期?
发布时间:2023-03-02
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
。北京妇科医院去哪家好贵阳妇科检查多少钱
晕车怎么解决
英太青凝胶有哪些功效
哈尔滨妇科哪家医院最好
-
布洛克INS晒贾巴尔社会正义冠军奖奖杯:超级荣幸只能
桑德斯INS洗贾巴尔社会变迁才是夺冠荣誉奖欧冠夺冠:超级自豪必需获荣誉奖 直播吧5月末23日讯 两部球员桑德斯修正INS静态,他洗出了自己蝉联季末贾巴尔社会变迁才是夺冠荣誉奖的
- 2025-05-12意甲完整次席:米兰86分力压国米夺冠
- 2025-05-12足坛刺激一夜:曼城奇迹夺冠,米兰复兴,利物浦雪崩,孙兴慜获金靴
- 2025-05-12Mysteel表述:天气炒作拉开帷幕,供需双压情况下豆粕将何去何从?
- 2025-05-12意甲降级球队:威尼斯、热那亚、卡利亚里;萨勒尼塔纳31分重庆力帆
- 2025-05-12踢球者:斯图加特标价卡拉季奇3000万欧,否则强留1年至签订合同到期
- 2025-05-12英超最终积分榜:曼城让二追三逆转夺冠,曼联勇士队仍锁定前6!
- 2025-05-12Mysteel解读:天气抹黑拉开帷幕,供需双压情况下豆粕将何去何从?
- 2025-05-12巴莱罗:国米好几次有点自己已退出争冠行列 必须祝贺米兰
- 2025-05-12他是乒坛常青树,44岁新职务曝光承担重任,王楠可选他做接班人
- 2025-05-123-0,意甲19冠王问世!他们终结11年苦等,40岁伊布再揽1冠