• [热门活动] 【赋能学习季】精选课程《API网关:助力API经济》分享任务规则&奖励
    分享任务规则&奖励:活动时间:2020年10月16日-2020年11月15日 ·         分享任务规则&奖励:分享文案+链接,每次分享可获得500码豆,最多可获1000码豆;第一步: 分享以下文案+活动链接至朋友圈或100人以上技术群(微信、QQ、钉钉不限);(注:如分享朋友圈需满1小时后截图)每次分享完成并上传截图可获得500码豆(最高可获得1000码豆),码豆可用于兑换码豆会员中心精美实物礼品。分享文案&链接:我正在参与华为云学院赋能学习季精选课程:《API网关:助力API经济》,课程学习加Demo体验,30分钟轻松玩转华为云API网关,参与学习还能赢精美好礼!活动链接:https://bbs.huaweicloud.com/forum/thread-65521-1-1.html第二步: 分享完成后截图,点击这里或复制打开链接:https://www.wjx.top/jq/93822668.aspx 上传分享截图;符合要求的截图即可算作分享成功;码豆奖励会在活动结束后15个工作日内发放。
  • [技术干货] 登陆鉴权————应用示例!!
    普通登录鉴权业务流程!!应用场景在使用CloudPortal提供的各类会议业务之前,需要向服务器完成鉴权登录;当不再使用业务时注销,确保业务接口使用的安全性业务流程:初始化参数,填入帐号、密码等参数。第三方向网关APIG发起鉴权请求,携带初始化参数。网关APIG接收请求后,对帐号及密码进行base64转码(即:Base64(username:password)),并向CloudPortal发起鉴权请求。CloudPortal鉴权通过后,向APIG网关返回Token及帐号信息。网关APIG将收到的token信息返回给第三方。token过期后,向网关APIG发送刷新Token请求。网关APIG接收请求后,向CloudPortal发送刷新Token请求。CloudPortal返回刷新后的Token信息给网关APIG。网关APIG返回刷新后的token给第三方。如果还有疑惑,可以点击链接看详细描述哦!————https://support.huaweicloud.com/api-meeting/meeting_21_0303.html
  • [技术干货] APIG常见问题FAQ
    目录如下,详见附件:
  • [公告] SMC2.0二次开发之eSDK/APIG资源链接(已下线)
     eSDK/APIG配套到SMC19.1SPC100,后续将推出JAVA SDK,将不需要再安装eSDK/APIG平台;若要使用SMC全量功能接口,建议使用SMC原生接口,请了解这些,根据项目需求选择开发方案,谢谢! SMC API(SMC原生接口开发,第五章节为开发示例)https://support.huawei.com/enterprise/zh/doc/EDOC1100101272?idPath=22658044%7C21781198%7C21781768%7C21781990%7C6644576 APIG(需要一**立服务器安装,裸金属、FC6.5、HCS三种服务器平台具备安装欧拉镜像系统硬件能力,裸金属请勿使用2288HV5服务器)1、eSDK EC  下载https://support.huawei.com/enterprise/zh/uc-c-common/esdk-ec-pid-22190398/software/250798008?idAbsPath=fixnode01%7C22658044%7C21781198%7C221903982 、欧拉系统 和APIG平台安装指南https://support.huawei.com/enterprise/zh/doc/EDOC1100115777?idPath=22658044%7C21781198%7C22190398https://support.huawei.com/enterprise/zh/doc/EDOC1100075608?idPath=22658044%7C7919788%7C9856606%7C21734214%7C23505807### 3、eSDK CloudVC 19.1.3 服务端API安装配置指南https://support.huawei.com/enterprise/zh/doc/EDOC1100115778?idPath=22658044%7C21781198%7C22190398 4、开发指南https://support.huawei.com/enterprise/zh/doc/EDOC1100115785?idPath=22658044%7C21781198%7C22190398 5、接口参考JAVA Nativehttps://support.huawei.com/enterprise/zh/doc/EDOC1100115781?idPath=22658044%7C21781198%7C22190398 SOAP:https://support.huawei.com/enterprise/zh/doc/EDOC1100115782?idPath=22658044%7C21781198%7C22190398 6、Demohttps://github.com/Huawei/eSDK_TP_APIG_Demo_Native eSDK server(可与SMC合设)1、eSDK 软件下载https://support.huawei.com/enterprise/zh/uc-c-common/esdk-tp-pid-21057343/software/23873953?idAbsPath=fixnode01%7C22658044%7C21781198%7C210573432、开发指南Java Nativehttps://support.huawei.com/enterprise/zh/doc/EDOC1100067410?idPath=22658044%7C21781198%7C21057343SOAPhttps://support.huawei.com/enterprise/zh/doc/EDOC1100012581?idPath=22658044%7C21781198%7C210573433、接口文档Java nativehttps://support.huawei.com/enterprise/zh/doc/EDOC1100067471?idPath=22658044%7C21781198%7C21057343SOAPhttps://support.huawei.com/enterprise/zh/doc/EDOC1100012580?idPath=22658044%7C21781198%7C210573434、安装配置指南https://support.huawei.com/enterprise/zh/doc/EDOC1100012579?idPath=22658044%7C21781198%7C21057343  
  • [技术干货] 【API进阶之路】半天搞定百万条手机号归属地查询,竟影响了公司战略方向!
    一到7月,部门老大忙着开年中会,很少露面,偶尔见到他聊了两句,他说:“最近开会忙着讨论公司下半年的业务方向,老板新拿了一笔融资,想要确定在哪些城市布局分公司,把当地的业务做大。可之前的市场调研工作做得不是很充分,数据不完整,讨论两天了都没定下来,这不还得继续去开会。”老大不在,再加上业务方向还没确定,而我因为上次那场直播扛住了比预估访问量大10倍的并发流量,工资涨了30%,工作反倒轻松下来了。了解详情请戳:《如何通过SDK接口搞定千万级流量直播》 咱是个老实本分的人,老板给涨了工资,咱不能磨洋工啊,可是干点啥呢?老大说他们在讨论要在哪些城市开分公司,那就要看哪儿的客户多对吧?不过也不对,客户多的城市有可能市场已经饱和了,那就应该看...应该看咨询量大的城市是哪些!可是“哪个城市咨询量大”要怎么看呢?客服电话又取不到IP地址,电话...电话?对了!电话是有归属地的,有电话号码就可以查到归属地了。 习惯性地到华为云官网搜了一下电话号码归属地查询的方法,果然找到了对应的方法,这就好办了,我从公司的数据库里导出来最近5年打进客服电话的电话号码,查重后有上百万条数据,然后在API网关创建发布调用API,自动分析出来最近5年各城市打入客服电话的电话号码数。我赶紧把分析结果发给了老大,老大居然很少见地非常正式地回了一句:“感谢”。什么情况?下午他们开完会回来,老大拍着我的肩膀说:“战略方向定了,你这次可又让我风光了一把啊,哈哈!” 你能想到吗?一个半天就搞定的技术成果,竟然影响到了整个公司的战略方向!照例,产出共享技术文档,《基于API网关的电话号码归属地查询指南》 一、准备环境在通过API网关开放电话号码归属地查询服务前,需要获取登录华为云控制台的用户名和密码,并确保已实名认证。同时,还需要获取如下表所示的环境信息。二、开放API1、登录华为云控制台,进入API网关服务。2、创建分组3、创建API1)在“新建API”的“基本信息”界面,输入下图所示基本信息。2)在“定义API请求”界面,输入如下图所示信息3)在“定义后端服务”界面,输入下图所示信息4)在“返回结果基础定义”界面,输入如下图所示信息。点击完成,完成API的创建。4、调试API5、发布API三、调用API1、在API详情界面,复制“API URL”。2、打开浏览器,在地址栏粘贴“API URL”的地址,并且“{phoneNumber}”替换为待查询的电话号码。请求API成功时,返回电话号码归属地信息。至此,调用API进行手机归属地查询已完成,还可以将此API绑定流控策略,进行流量控制、查看监控数据,确保API可以提供持续稳定的服务。此处不展开介绍,可点击查看完整版。都说技术要赋能业务,服务好业务,而如果再往前走一步,技术也可以指引业务的发展方向,真正的科技思维是从“科技重塑业务”的视角出发,引领业务发展。 据了解,目前API Explorer平台已开放EI企业智能、计算、应用服务、网络、软件开发平台、视频等70+云服务,共上线2000+个API、6000+个错误码。在前期试运行期间,华为云API Explorer平台上的API接口也已被多家企业成功接入。点击查看详情:《华为云一站式API解决方案平台API Explorer上线》华为云API Explorer平台在未来几个月会实现更多功能,比如支持SDK示例代码、CLI等特性,同时也会开放更多的云服务API接口,连接更多开发者实现创新、拓宽创新边界。
  • [教程] APIG体验Demo指导
    【乘风破浪赋能学习季】精选课程活动:《API网关:助力API经济》APIG体验Demo链接:https://console.huaweicloud.com/apig/?&locale=zh-cn#/apig/expdemo/ 此Demo主要用于演示API网关的使用,通过一键式操作,介绍一个具备“HTTP回显”功能的API的创建、发布以及绑定流控等操作,最终您可以调试或直接调用这个API。“HTTP回显”API的主要功能为:您通过HTTP GET方式调用API,业务后端将本次调用的所有请求信息通过response返回给您。说明: ·         您如果需要再次体验Demo,需要先将Demo创建的API和API分组删除。·         仅在第一体验时创建流控策略,如果再次体验前未删除,再次体验时不会再创建另一个流控策略。操作步骤1.       单击“体验Demo”,进入“体验Demo”页面。系统自动完成如下操作:o    创建分组o    创建APIo    调试API并发布到Release环境o    创建流控策略并将API绑定流控策略图1 体验Demo2.       单击“调用API”,进入“调试API”页面。3.       在“查询参数”以及“请求头”处分别添加请求参数与头部消息。在此Demo中,请求参数与头部消息参数只做演示参考,无实际作用。o    调试成功时,返回HTTP状态码为“200”和本次调试的请求信息与返回信息。调试成功后,将回显Demo实际收到的本次请求信息。如下图所示。o    调试失败时,返回HTTP状态码为4xx或5xx,具体错误信息请参见错误码。图2 调试API(并截图打卡,截图需包含右上角账户名)4.       调用API。a.       在“开放API > API管理”中,单击“HttpEchoDemo”,进入HTTP回显的API详情页面。b.       在“总览”页签,在“API URL”所在行,单击,复制URL。图3 API详情c.       在浏览器中粘贴URL,按“Enter”,查看API调用结果。后端成功返回后,页面显示本次API调用的实际请求信息,即后端Demo服务收到的API最终信息。图4 调用结果(并截图打卡)
  • [技术干货] 19.1.3APIG验证示例
    postmain验证APIG安装配置:1、url地址填APIG服务地址,Headers填充(3)(4)2、填充body体,格式选 XML 
  • [热门活动] HDZ Summit 2020【开发者最佳实践挑战】第1关任务:基于API网关的电话号码归属地查询
    感谢参与本期活动!本期《开发者最佳实践挑战营》活动已于7月8日24:00结束,可添加小助手微信等待下期开启添加小助手微信:zhongjianjianxiaoge欢迎参加华为云“开发者最佳实践挑战营”!这是本次挑战营的第1关,坚持闯关成功有机会获7000+码豆/体脂秤/手环/摄像机等精美好礼!本期活动截止7月8日。注意:参与闯关前,请确保已报名加入活动群并领取实践资源,如未入群请添加小助手微信(zhongjianjianxiaoge),回复“最佳实践”报名入群!点击这里了解活动详情>>  | 点击这里查看活动FAQ>> 本手册基于华为云API网关实践所编写,用于指导您开放并调用API。本手册主要指导您将电话号码归属地查询作为后端服务,开放一个查询API,并将此API发布到RELEASE环境,以便调用。最后将此API绑定流控策略,进行流量控制,确保API可以提供持续稳定的服务。 什么是API网关?API网关(API Gateway)是为开发者、合作伙伴提供的高性能、高可用、高安全的API托管服务,帮助用户轻松构建、管理和部署任意规模的API。 为什么使用API网关?轻松构建、管理和部署任意规模的API。灵活自定义的流量控制策略制定,保障API服务的稳定和连续。提供多种API监控指标,更方便统计分析API服务情况。 实践资源说明:API网关服务仅对开放API的用户收费。开通服务、创建API、发布API、管理API免费。计费价格详情见:https://www.huaweicloud.com/pricing.html?tab=detail#/apig提示:本次实践建议使用APIG共享版,并选择“上海二”区域;实践费用预计:0元≤实践费用<1元。(1)体验Demo:点击这里开始体验APIG Demo>>(此Demo主要用于演示API网关的使用,通过一键式操作,介绍一个具备“HTTP回显”功能的API的创建、发布以及绑定流控等操作,最终您可以调试或直接调用这个API)查看Demo操作指南>>(2)最佳实践指南:https://support.huaweicloud.com/bestpractice-apig/apig-zh-bp-180606001.html(3)操作演示视频:https://education.huaweicloud.com:8443/courses/course-v1:HuaweiX+CBUCNXP021+Self-paced/courseware/7212ae2f2e0e4fb68b67e37171399a39/5429e751ef9f44a698f453651c7f9eb1/(4)APIG基础课程:《API网关:助力API经济》 任务一:根据实践指南中体验Demo完成体验并截图,并按回帖格式要求在本帖中回帖;任务二:根据实践指南完成实践操作,将调试截图,将URL结果截图,并按回帖格式要求在本帖中回帖;1)通关、参与奖励&规则参与奖励、通关奖励限前150名完成的开发者(码豆奖励有限先到先得)①    参与奖励:每关完成创建实例可获100码豆,共6关最高可获得600码豆②    通关奖励:通过2关赠送:1000码豆通过4关赠送:2000码豆通过6关赠送:4000码豆活动结束后5个工作日内公示通关名单,15个工作日内发放码豆奖励。注:取通关最高值发放码豆奖励 2)分享任务规则&奖励:分享海报,每次分享可获得500码豆,最多可分享5次,可获2500码豆激励第一步: 分享以下文案+海报至朋友圈或100人以上技术群(微信、QQ、钉钉不限)。每次分享可获得500码豆,最高2500码豆!码豆可用于兑换DevCloud会员中心精美实物礼品。(1)文案:我正在参与华为云开发者最佳实践挑战营,场景化实战get云上开发技能,闯关还能赢好礼!(2)海报:添加小助手微信(zhongjianjianxiaoge),回复“分享海报”获取海报和文案。第二步: 分享完成后,截图点击链接https://www.wjx.top/jq/79372993.aspx 上传分享截图;符合要求的截图即可算作分享成功1次,获得500码豆,最高可获2500码豆!码豆奖励会在活动结束后15个工作日内发放3)幸运奖抽奖规则&奖励:(1)全通关可参与抽取:荣耀小哨兵智能摄像机 广角版、华为手环跑步精灵3e手环、荣耀智能体脂秤2;(2)活动结束后5个工作日内公示通关名单,并在微信群中统一抽奖。中奖名单公布后,用户需单独提供收件信息,奖品将于15个工作日内发放。为避免无法发放码豆,从未登录过会员中心的用户需提前登陆下DevCloud会员中心本次活动发放的码豆有效期至2020年9月1日  请务必按照以下格式要求进行回帖,否则无法计算奖励:华为云账号名:XXX(即右上角的字母数字组合ID)微信昵称:XXX实践感想:XXX实践截图:至少包含(a)体验Demo调用结果截图、(b)调试结果截图、(c)调用API截图、(d)监控数据截图,共 4张截图。例1-体验Demo调用结果:例2-调试结果:例3-调用API:例4-监控数据:附各关卡快速入口:第1关任务:基于API网关的电话号码归属地查询第2关任务:使用函数工作流服务为图片打水印第3关任务:使用Redis实现排行榜功能第4关任务:使用DMS Kafka优化消费者poll第5关任务:使用CPTS进行电商网站性能测试第6关任务:基于ServiceStage的天气预报应用部署
  • [热门活动] 使用Roma开发一个接口在LiveData阶段测试都没有问题,但是授权后在API网关却没有返回数据
    使用Roma开发一个接口在LiveData阶段测试都没有问题,但是授权后在API网关却没有返回数据以下是截图:
  • 【中间件最佳实践挑战】第1关任务:基于API网关的电话号码归属地查询
    欢迎参加华为云活动“中间件最佳实践挑战营”!这是本次挑战营的第1关,坚持闯关成功有机会获第五期好礼:码豆/荣耀手环/华为背包等,全通关还有大奖!本期活动截止5月24日。注意:参与闯关前,请确保已报名加入活动群并领取实践资源,如未入群请点击添加小助手微信(zhongjianjianxiaoge),回复“中间件”报名入群!点击这里了解活动详情>>  | 点击这里查看活动FAQ>> 一、  场景介绍本手册基于华为云API网关实践所编写,用于指导您开放并调用API。本手册主要指导您将电话号码归属地查询作为后端服务,开放一个查询API,并将此API发布到RELEASE环境,以便调用。最后将此API绑定流控策略,进行流量控制,确保API可以提供持续稳定的服务。 什么是API网关?API网关(API Gateway)是为开发者、合作伙伴提供的高性能、高可用、高安全的API托管服务,帮助用户轻松构建、管理和部署任意规模的API。 为什么使用API网关?轻松构建、管理和部署任意规模的API。灵活自定义的流量控制策略制定,保障API服务的稳定和连续。提供多种API监控指标,更方便统计分析API服务情况。 二、  实践指南(1)实践资源说明:API网关服务仅对开放API的用户收费。开通服务、创建API、发布API、管理API免费。计费价格详情见:https://www.huaweicloud.com/pricing.html?tab=detail#/apig提示:本次实践建议使用APIG共享版,并选择“上海二”区域;实践费用预计:0元≤实践费用<1元。(2)最佳实践指南:https://support.huaweicloud.com/bestpractice-apig/apig-zh-bp-180606001.html(3)操作演示视频:https://education.huaweicloud.com:8443/courses/course-v1:HuaweiX+CBUCNXP021+Self-paced/courseware/7212ae2f2e0e4fb68b67e37171399a39/5429e751ef9f44a698f453651c7f9eb1/(4)APIG基础课程:《API网关:助力API经济》 三、  闯关任务任务一:创建API分组、创建API,并将API详情页“总览”截图,截图需包含右上角华为云账号名,并按回帖格式要求在本帖中回帖;奖励:100码豆(可用于兑换DevCloud会员中心实物好礼); 任务二:根据实践指南完成实践操作,将调试截图,将URL结果截图,并按回帖格式要求在本帖中回帖;奖励:本期闯1关可参与抽取“荣耀手环4 Running版”;闯2关可参与抽取“华为背包”;详见FAQ评奖规则  四、  回帖格式请务必按照以下格式要求进行回帖,否则无法计算奖励:华为云账号名:XXX(即右上角的字母数字组合ID)微信昵称:XXX实践感想:XXX实践截图:至少包含(a)API详情页总览截图、(b)调试结果截图、(c)调用API截图、(d)监控数据截图,共 4 张截图。例1-API详情页“总览”:例2-调试结果:例3-调用API:例4-监控数据:附各关卡快速入口:第1关任务:基于API网关的电话号码归属地查询第2关任务:使用函数工作流服务为图片打水印第3关任务:使用Redis实现排行榜功能第4关任务:使用DMS Kafka优化消费者poll第5关任务:使用CPTS进行电商网站性能测试
  • [热门活动] 专享体验才更爽!华为云推出专享版API网关,等你来pick
    华为云API网关 按需计费只需 4. 78元/小时,点击了解:https://www.huaweicloud.com/product/apig.html相信在使用华为云API网关的小伙伴最近会惊奇的发现API网关的控制台多出了一个专享版的页签并且大大的"购买专享版"也在提醒用户,API网关又出新功能啦~~ 然而,惊喜的同时,正在看本文的小伙伴一定是满肚子疑问专享版API网关是什么?有什么用?共享版的API网关用的好好的,为什么要费时费力的用专享版的API网关?为了解答用户的疑问,首先小编想问问大家,下面这些尴尬的场景,你遇到过吗? 开车没有专属停车位,绕“场”三匝,何“位”可依!洗澡没有专属淋浴间,和隔壁“坦诚相对”,只剩尴尬!挤高峰地铁没有专属座位,灭霸爸爸打响指都挤不进去! 想要避免这些尴尬,一劳永逸的办法当然是能够拥有属于自己的专属的淋浴间、停车位、交通工具可见,无论哪种场景下,我们都想获得一种归属感和安全感。 ------这里是回归正题的分割线------- 说了这么多有的没的,目的就是告诉读者,专享版和共享版API网关的本质区别就在于,是否能够让用户获得归属感和安全感。专享版API网关的三大优势:1、计算和网络带宽资源独占,物理级隔离,安全性更高,实现真正意义上的资源完全隔离,性能也更加稳定。2、专享版可以自定义绑定EIP,支持配置更大的公网网络带宽,构建API调用的“高速公路”。3、支持多种方式调用后端服务,无需通过创建VPC通道,直接通过私网ip即可访问后端,更加灵活。看到这里的小伙伴是不是觉得,也不过如此,那小编告诉你图样图森破 后续华为云的工程师小哥哥和小姐姐们还会推出以下特性:1、专享版提供多种套餐规格,按照您的业务量规划,为您量身打造合适的带宽跟性能套餐,支持在线扩容2、提供包周期的计费模式3、支持复杂的API编排,通过API网关引入编排层,通过编排层以一种更具体的方式处理数据元素或者特性,从而为某个目标开发者或应用做准备 专享版API网关不需要复杂的规则和计算公式,不需要各路数学大神相助。按需计费模式购买专享版API网关只要 4. 78元/小时马上点击这里了解/抢购API网关吧!
  • 5分钟APIG实战| 使用Rust语言快速构建API能力开放
    文档内容快速浏览:1 序言:Rust语言简介   1.1 核心概念:所有权系统2 使用Rust进行HTTP Web后端应用开发   2.1 实战演练         2.1.1 准备后端应用服务器         2.1.1 安装相关的工具链         2.1.2 编写后端Web应用   2.2 API部署1 序言:Rust语言简介参与过C/C++大型项目的同学可能都经历过因为Null Pointer、Memory Leak等问题“被” 加班了不知道多少个晚上。别沮丧,你不是一个人,Mozilla Firefox的开发者们同样经历过这个问题。浏览器可以说是我们日常使用最为频繁的软件了,目前主流的浏览器主要 有Google Chrome、Internet Explorer、Mozilla Firefox。为了提升用户体验,Mozilla就已经启动了多线程渲染的计划。然而,面对大型的C/C++工程,Mozilla的开发者们也坚持不住了。此时,Rust进入了开发者的眼中,与C语言ABI兼容、多编程范式支持、无GC及独特的所有权系统,使得Mozilla与Rust语言一拍即合,并迅速启动了 Mozilla 的下一代浏览器引擎项目:servo,到目前为止(2018年8 月),servo已经成为了除Rust编译器自身外,社区中最大的Rust项目。servo目前已经部 分应用在Firefox 57之后的版本中。Rust语言的设计目标是安全、高效、并发以及实用性。Rust 从一定程度上解决了C++的以 下痛点:1.  容器/数组越界访问;2.  动态内存分配的泄露与double free问题;3.  难以对依赖进行管理;其中前两点在C/C++项目中是最容易引发Bug以及安全问题的原因,依靠人来对这些问题进行检查往往不是最佳的解决方案。Rust通过其独特的所有权系统,简化所研究的对象,使得一些隐晦的问题在编译期间便暴露出来。任何事情都是有两面性的,由于严格的编译期检查以及工程实现上的取舍,Rust在一定程度上牺牲了编译速度以及灵活性,对“灵活性”的舍弃并不代表Rust语言的表现力下降,只是我们在编写Rust程序时,可能需要 改变一下以往的思路。在Rust圈子中,有一句调侃:“C++是调试的时候想撞墙,而Rust是编译的时候想撞墙”。接下来我们将通过一个简单的例子来建立Rust中所有权系统的一个基本印象。1.1 核心概念:所有权系统Rust 的所有权系统包括三个核心概念:所有权、借用以及生命周期。我们首先来通过一个 简单的例子来建立对所有权以及生命周期的直观概念。#[derive(Debug)]  struct Foo;    fn main() {      let foo = Foo; // Note: Foo not implement Copy trait      let bar = foo;        println!("{:?}", bar);      // println!("{:?}", foo);  }首先创建了一个Foo类型的变量foo,然后我们执行let bar = foo;,然后我们尝试 输出这两个变量的值,如果我们将第9行的注释去掉,程序将无法通过编译,这是因为在 Rust中,对于没有实现Copy trait的类型,如果我们将一个绑定赋给另一个绑定,默认 使用的是move语义,也即对于任意给定的资源,当且仅当有一个变量绑定与之对应。想要进一步学习Rust的小哥哥小姐姐,可以参考Rust Learning。2 使用Rust进行HTTP Web后端应用开发在Rust生态中进行HTTP Web后端应用开发目前主要依赖两个基础库:http 以及hyper,其中 http 提供HTTP标准相关的基础类型,如Request<T> 、Response<T>以及StatusCode和常用的Header等;hyper的定位是一个高效、准确的 HTTP底层库,它封装了HTTP的报文解析、报文编码处理、连接控制等内容,对于用户而言 只需要实现一个类似于Fn(Request) -> Response的映射,就可以完成HTTP Web服务端的开 发。基于http以及hyper,社区中还有很多用于Web应用开发的框架,常用的有:•  rocket•  iron• actix-web•  tower-web值得一提的是上周刚发布的tower-web,因为这是官方net团队2018年工作计划的一部分, 这个库在未来会为Rust生态提供一个灵活、高效、易于使用的Web开发框架。那么事不宜迟, 我们通过实战演练来一睹为快。 在本月月底,tower-web将会集成到warp项目中,成为warp框架的一部分,开发的重心将会转移到warp上。2.1 实战演练2.1.1 准备后端应用服务器登录华为云,并创建弹性云服务器作为我们的后端应用服务器。实战中使用的系统版本为Ubuntu 16.04,如果选择不同的系统需要根据情况调整命令。2.1.2 安装相关的工具链apt update && apt install build-essential# 安装Rust工具链curl https://sh.rustup.rs -sSf | sh这一步结束后,我们就可以开始编写我们的应用服务了。2.1.3 编写后端Web应用这次分享我们来构建一个RESTful中文分词API。1. 首先我们来创建一个Rust工程 cargo new --bin chinese_segmentation2. 接下来在Cargo.toml中添加相关依赖。[dependencies]  tower-web = "0.2"  # Jieba Chinese Work Segmentation  jieba-rs = "0.2"    # logging utils  log = "0.4.0"  env_logger = "0.5.12"    # Serializing responses, deserializing requests  serde = "1.0.70"3. 然后是我们的main.rs,与其他语言一样,在文件开始的部分引入外部依赖以及相关声明:extern crate jieba_rs;  #[macro_use]  extern crate tower_web;    #[macro_use]  extern crate log;  extern crate env_logger;    use std::iter::FromIterator;  use std::collections::HashSet;    use jieba_rs::Jieba;  use tower_web::ServiceBuilder;4. 接下来我们定义我们的服务资源ChineseTokenizer:#[derive(Debug)]  struct ChineseTokenizer {      inner: Jieba,  }    impl ChineseTokenizer {      pub fn new() -> ChineseTokenizer {          ChineseTokenizer { inner: Jieba::new() }      }        //对传入的字符串进行分词,并返回一个字符串向量      pub fn cut(&self, text: &String) -> Vec<String> {          let words = self.inner.cut(&text, true)              .into_iter()              .map(|word| word.to_owned())              .collect::<HashSet<String>>();            let mut words = Vec::from_iter(words.into_iter());            //由于使用HashSet进行去重会引入不确定性,               //因此对结果进行重排,使输出的结果有序。          words.sort();          words      }  }5. 定义了我们的服务资源后,我们来定义输入Web API的输入输出类型:#[derive(Debug, Extract)]  struct TokenizeRequest {      text: String  }    #[derive(Debug, Response)]  #[web(status = "200")] //当handler返回Ok(xx)时,返回200状态码  struct TokenizeResponse {      words: Vec<String>,  }6. 到目前为止,我们已经有了我们的服务资源,输入输出类型,接下来就到我们的重头戏了, Web 部分的实现,别担心,因为真的很简单。impl_web! {      impl ChineseTokenizer {          #[post("/tokenize")]          #[content_type("application/json")]          fn tokenize(&self, body: TokenizeRequest) -> Reqult<TokenizeResponse, ()> {              Ok(TokenizeResponse {                  words: self.cut(&body.text),              })          }      }  }7. 最后是我们的main函数:fn main() {      //初始化Logger      env_logger::init();      let addr = "0.0.0.0:8081".parse().expect("invalid address");      info!("listening on http://{}", addr);        ServiceBuilder::new()          .resource(ChineseTokenizer::new()) //注册我们的服务资源          .run(&addr)             //让我们的服务跑起来          .unwrap();  }8. 现在,我们通过命令RUST_LOG=chinese_segmentation=info cargo run --release来检验 一下我们的成果了。  服务在本地跑起来之后,我们可以通过命令 curl -H "Content-Type: application/json" -X POST -d '{"text":"中间件小哥"}' <url> 来测试一下我们的接口。  本地测试通过之后,就需要着手开始部署了,我们检查一下弹性云服务器的安全组的入方向 是否放开8081端口。2.2 API 部署API 网关集成了监控、流控、负载均衡等一系列功能,为开发者提供高性能、高可用的API 托管服务,在本次实践中,我们将我们的API部署在API网关中。1. 登录华为云API网关服务,选择“新建API”。    2. 填写API的基本信息  在本次实验中,选择无认证。      3. 定义API请求。  请求路径填为 /segment,方法为 POST      4.   定义后端服务。  请求方式设置为POST,在VPC通道这一项中,我们需要新建VPC通道。端口设置为8081, 并将其与弹性云服务器关联。      6. 创建完VPC通道后,回到API创建页面,填入相关信息:     7. 网关创建完成后,我们需要回到我们的弹性云服务器,将我们的后端服务器先跑起来:     RUST_LOG=chinese_segmentation=info nohup ./target/release/chinese_segmentation 2>&1 ~/api.log &  作为示例,这里使用nohup命令来跑我们的服务。但在生产环境中,建议使用 systemd等工具来跑服务。8. 服务在云服务器运行起来之后,将API发布至RELEASE环境中。     然后我们就可以和我们的API愉快地玩耍啦。 欢迎扫码查看更多精彩: 
  • 5分钟APIG实战| 使用Rust语言快速构建API能力开放
    文档内容快速浏览:1 序言:Rust语言简介   1.1 核心概念:所有权系统2 使用Rust进行HTTP Web后端应用开发   2.1 实战演练         2.1.1 准备后端应用服务器         2.1.1 安装相关的工具链         2.1.2 编写后端Web应用   2.2 API部署1 序言:Rust语言简介参与过C/C++大型项目的同学可能都经历过因为Null Pointer、Memory Leak等问题“被” 加班了不知道多少个晚上。别沮丧,你不是一个人,Mozilla Firefox的开发者们同样经历过这个问题。浏览器可以说是我们日常使用最为频繁的软件了,目前主流的浏览器主要 有Google Chrome、Internet Explorer、Mozilla Firefox。为了提升用户体验,Mozilla就已经启动了多线程渲染的计划。然而,面对大型的C/C++工程,Mozilla的开发者们也坚持不住了。此时,Rust进入了开发者的眼中,与C语言ABI兼容、多编程范式支持、无GC及独特的所有权系统,使得Mozilla与Rust语言一拍即合,并迅速启动了 Mozilla 的下一代浏览器引擎项目:servo,到目前为止(2018年8 月),servo已经成为了除Rust编译器自身外,社区中最大的Rust项目。servo目前已经部 分应用在Firefox 57之后的版本中。Rust语言的设计目标是安全、高效、并发以及实用性。Rust 从一定程度上解决了C++的以 下痛点:1.  容器/数组越界访问;2.  动态内存分配的泄露与double free问题;3.  难以对依赖进行管理;其中前两点在C/C++项目中是最容易引发Bug以及安全问题的原因,依靠人来对这些问题进行检查往往不是最佳的解决方案。Rust通过其独特的所有权系统,简化所研究的对象,使得一些隐晦的问题在编译期间便暴露出来。任何事情都是有两面性的,由于严格的编译期检查以及工程实现上的取舍,Rust在一定程度上牺牲了编译速度以及灵活性,对“灵活性”的舍弃并不代表Rust语言的表现力下降,只是我们在编写Rust程序时,可能需要 改变一下以往的思路。在Rust圈子中,有一句调侃:“C++是调试的时候想撞墙,而Rust是编译的时候想撞墙”。接下来我们将通过一个简单的例子来建立Rust中所有权系统的一个基本印象。1.1 核心概念:所有权系统Rust 的所有权系统包括三个核心概念:所有权、借用以及生命周期。我们首先来通过一个 简单的例子来建立对所有权以及生命周期的直观概念。#[derive(Debug)]  struct Foo;    fn main() {      let foo = Foo; // Note: Foo not implement Copy trait      let bar = foo;        println!("{:?}", bar);      // println!("{:?}", foo);  }首先创建了一个Foo类型的变量foo,然后我们执行let bar = foo;,然后我们尝试 输出这两个变量的值,如果我们将第9行的注释去掉,程序将无法通过编译,这是因为在 Rust中,对于没有实现Copy trait的类型,如果我们将一个绑定赋给另一个绑定,默认 使用的是move语义,也即对于任意给定的资源,当且仅当有一个变量绑定与之对应。想要进一步学习Rust的小哥哥小姐姐,可以参考Rust Learning。2 使用Rust进行HTTP Web后端应用开发在Rust生态中进行HTTP Web后端应用开发目前主要依赖两个基础库:http 以及hyper,其中 http 提供HTTP标准相关的基础类型,如Request<T> 、Response<T>以及StatusCode和常用的Header等;hyper的定位是一个高效、准确的 HTTP底层库,它封装了HTTP的报文解析、报文编码处理、连接控制等内容,对于用户而言 只需要实现一个类似于Fn(Request) -> Response的映射,就可以完成HTTP Web服务端的开 发。基于http以及hyper,社区中还有很多用于Web应用开发的框架,常用的有:•  rocket•  iron• actix-web•  tower-web值得一提的是上周刚发布的tower-web,因为这是官方net团队2018年工作计划的一部分, 这个库在未来会为Rust生态提供一个灵活、高效、易于使用的Web开发框架。那么事不宜迟, 我们通过实战演练来一睹为快。 在本月月底,tower-web将会集成到warp项目中,成为warp框架的一部分,开发的重心将会转移到warp上。2.1 实战演练2.1.1 准备后端应用服务器登录华为云,并创建弹性云服务器作为我们的后端应用服务器。实战中使用的系统版本为Ubuntu 16.04,如果选择不同的系统需要根据情况调整命令。2.1.2 安装相关的工具链apt update && apt install build-essential# 安装Rust工具链curl https://sh.rustup.rs -sSf | sh这一步结束后,我们就可以开始编写我们的应用服务了。2.1.3 编写后端Web应用这次分享我们来构建一个RESTful中文分词API。1. 首先我们来创建一个Rust工程 cargo new --bin chinese_segmentation2. 接下来在Cargo.toml中添加相关依赖。[dependencies]  tower-web = "0.2"  # Jieba Chinese Work Segmentation  jieba-rs = "0.2"    # logging utils  log = "0.4.0"  env_logger = "0.5.12"    # Serializing responses, deserializing requests  serde = "1.0.70"3. 然后是我们的main.rs,与其他语言一样,在文件开始的部分引入外部依赖以及相关声明:extern crate jieba_rs;  #[macro_use]  extern crate tower_web;    #[macro_use]  extern crate log;  extern crate env_logger;    use std::iter::FromIterator;  use std::collections::HashSet;    use jieba_rs::Jieba;  use tower_web::ServiceBuilder;4. 接下来我们定义我们的服务资源ChineseTokenizer:#[derive(Debug)]  struct ChineseTokenizer {      inner: Jieba,  }    impl ChineseTokenizer {      pub fn new() -> ChineseTokenizer {          ChineseTokenizer { inner: Jieba::new() }      }        //对传入的字符串进行分词,并返回一个字符串向量      pub fn cut(&self, text: &String) -> Vec<String> {          let words = self.inner.cut(&text, true)              .into_iter()              .map(|word| word.to_owned())              .collect::<HashSet<String>>();            let mut words = Vec::from_iter(words.into_iter());            //由于使用HashSet进行去重会引入不确定性,               //因此对结果进行重排,使输出的结果有序。          words.sort();          words      }  }5. 定义了我们的服务资源后,我们来定义输入Web API的输入输出类型:#[derive(Debug, Extract)]  struct TokenizeRequest {      text: String  }    #[derive(Debug, Response)]  #[web(status = "200")] //当handler返回Ok(xx)时,返回200状态码  struct TokenizeResponse {      words: Vec<String>,  }6. 到目前为止,我们已经有了我们的服务资源,输入输出类型,接下来就到我们的重头戏了, Web 部分的实现,别担心,因为真的很简单。impl_web! {      impl ChineseTokenizer {          #[post("/tokenize")]          #[content_type("application/json")]          fn tokenize(&self, body: TokenizeRequest) -> Reqult<TokenizeResponse, ()> {              Ok(TokenizeResponse {                  words: self.cut(&body.text),              })          }      }  }7. 最后是我们的main函数:fn main() {      //初始化Logger      env_logger::init();      let addr = "0.0.0.0:8081".parse().expect("invalid address");      info!("listening on http://{}", addr);        ServiceBuilder::new()          .resource(ChineseTokenizer::new()) //注册我们的服务资源          .run(&addr)             //让我们的服务跑起来          .unwrap();  }8. 现在,我们通过命令RUST_LOG=chinese_segmentation=info cargo run --release来检验 一下我们的成果了。  服务在本地跑起来之后,我们可以通过命令 curl -H "Content-Type: application/json" -X POST -d '{"text":"中间件小哥"}' <url> 来测试一下我们的接口。  本地测试通过之后,就需要着手开始部署了,我们检查一下弹性云服务器的安全组的入方向 是否放开8081端口。2.2 API 部署API 网关集成了监控、流控、负载均衡等一系列功能,为开发者提供高性能、高可用的API 托管服务,在本次实践中,我们将我们的API部署在API网关中。1. 登录华为云API网关服务,选择“新建API”。    2. 填写API的基本信息  在本次实验中,选择无认证。      3. 定义API请求。  请求路径填为 /segment,方法为 POST      4.   定义后端服务。  请求方式设置为POST,在VPC通道这一项中,我们需要新建VPC通道。端口设置为8081, 并将其与弹性云服务器关联。      6. 创建完VPC通道后,回到API创建页面,填入相关信息:     7. 网关创建完成后,我们需要回到我们的弹性云服务器,将我们的后端服务器先跑起来:     RUST_LOG=chinese_segmentation=info nohup ./target/release/chinese_segmentation 2>&1 ~/api.log &  作为示例,这里使用nohup命令来跑我们的服务。但在生产环境中,建议使用 systemd等工具来跑服务。8. 服务在云服务器运行起来之后,将API发布至RELEASE环境中。     然后我们就可以和我们的API愉快地玩耍啦。 欢迎扫码查看更多精彩: 
  • 【干货贴】浅谈API网关(API Gateway)如何承载API经济生态链
    序言API经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API成为企业连接业务的核心载体, 并产生巨大的盈利空间。快速增长的API规模以及调用量,使得企业IT在架构上、模式上面临着更多的挑战。关于如何承载现有快速发展的API生态链,本文接下来介绍API网关在其中扮演的角色。API是什么 应用编程接口(Application Programming Interface,简称:API),就是软件系统不同组成部分衔接的约定【维基百科】。简单的例子: 您每次登陆微信, 需要提供账号信息才能访问, 微信提供的这个认证载体就是一个API。 API已经无处不在,金融、IT、物联网等,发展趋势相当迅速, 无形之中贯穿着我们的生活。纵观这几年的发展,API在不断的技术迭代中形成了几股共同的趋势:1.API开放数量不断增加毋庸置疑, 随着企业的数据化进展,微服务改造,不同领域的API层出不穷, 早在2014年ProgrammableWeb便预测API矢量可达到100,000到200,000, 并会不断增长。API开发数量的增加给边缘系统带来机会, 也随即演变了API网关的出现。大规模的API管理系统成为核心的发展趋势。                         (图片来源:The API Economy Disruption and the Business of APIs,Nordic APIs)      2.API服务平台多样化最初的API主要针对不同单体应用的网络单元之间信息交互, 现已演变到服务间快速通讯。随着人工智能EI, IOT的不断演进, 依赖API的平台不断更新, 如Web, Mobile, 终端等,未来将会出现更多的服务体系。                              3.逐步替换原有企业的服务模式,API即商品卖计算, 卖软件, 卖能力, 最终的企业的销售模式会逐步转变,能力变现, 释放数据价值,依托不同的API管理平台创造新的盈利。 API网关为何诞生随着API的整体趋势发展, 每个历史时代都面临着不同的挑战, 架构也随之变化, 可以参考一下: (图片来源:API economy From systems to business services) 从最原始的“传输协议通讯” -> “简单的接口集成” -> “消息中间件” -> “标准REST”, 可以看到API的发展更趋向于简洁, 集成,规范化, 这也促使更多的系统边界组件不断涌现,在承载了万亿级的API经济的背景下, API网关应运而生。 Gartner 报告中提到: 如果没有合适的API管理工具, API经济不可能顺利开展。 同时提出了对于API管理系统的生命周期定义: planning(规划), design(设计), implementation(实施), publication(发布),operation(运维), consumption(消费), maintenance(维护) and retirement of APIs(下架)【来源:Magic Quadrant for Full Life Cycle API Management,Gartner发表于2016-10-27】。API网关贯穿整个流程,并提供丰富的管理特性。•             高性能,可横向扩展•             高可靠,业务不中断•             插件化的API安全控制•             灵活的数据编排•             精细化流控•             API版本管理•             API数据分析•             高效插件化路由算法•             安全认证,防攻击•             API访问控制•             Swagger导入导出•             …API网关的设计核心实践提供一个可参考的高性能API网关架构, 在设计API网关的时候把整体分为两个平面, API Consumer使用的称之为数据平面, API Provider使用的称之为管理平面, 可在一定程度上对业务请求跟管理请求进行有效隔离。 先谈一下数据平面 API网关最核心设计理念: 保证数据面的业务不中断。由于对接API网关的服务是多样的, 客户API跟应用的设计不可控, 你很难能要求每个接入的服务以及客户端都具备容错能力, 特别是一些比较传统的业务。 这就要求网关尽量保证能正常处理每个请求, 且满足较高的SLA(Service-Level Agreement),现在业界的API网关分为几种: 直接使用云服务, Nginx系列, Golang系列, Java系列等, 选择比较多,如果想要自构建, 推荐使用Nginx系,主要考虑如下:1.支持热重启 数据面的组件升级是一个高风险动作, 一旦出现异常就可能导致连接中断,系统异常, 除非你的前端LB(负载均衡)能具备快速排水的能力,当然即使如此,还是可能导致正在处理的请求被强制中断。所以数据面的热重启非常关键。2.支持订阅式动态路由 API路由变化相对频繁,及时性也要求比较高, 如果采用定期同步方案, 一次性同步几万条的数据会拖慢你的系统, 因此增加一个订阅式的路由服务中心非常关键, 我们可以快速订阅ETCD中的路由数据并实时生效。而且只拿增量数据性能压力不会太大。3.支持插件化管理Nginx在插件方面提供了丰富的生态。不同的API,不同的用户所需要的处理流程不完全一致, 如果每个请求过来都按照相同流程处理,必定带来相关的冗余操作。 插件化管理可以在一定程度上提升性能,还能保障在升级过程中能快速添加处理链。4.高性能的转发能力API网关一般工作在多后端API反向代理模式,很多自研的API网关在性能上容易出现瓶颈,因此nginx优异的性能和高效的流量吞吐是其核心竞争力。5.无状态可横向扩展API网关承载的是整个系统所有请求的集合,需要根据业务规模进行弹性伸缩,采用服务中心配合Nginx配置管理可以快速增删已有的集群,并同步到LVS,实现快速的横向扩展能力。再说一下管理面相对于数据面, 管理面的约束就没有那么明显了, 管理面考虑更多应该在于数据的存储跟展示能力。一开始就定义好API的规范至关重要, Swagger作为现在最为主流的API描述模式,拥有非常完整的生态,AWS的整个API网关模型就是参考Swagger来构建的。核心架构实践API网关的相关实现, 我们今天就流控和路由遍历进行说明,其他相关的核心设计后续的文章中会陆续提供。精细化秒级流控 分钟级以上的流控,相对来说都比较好处理, 但是提升到秒级流控,对于系统的性能跟处理能力就是一个很大的挑战。网上的流控方案很多, 同步的,异步的各有优势, 但是都会遇到共同的问题: 性能与准确度。以下是一种最为常见的流控方案(集群流控), 使用Redis共享存储记录所有的流控请求并实时访问, 该架构存在一个很明显的问题:当集群数量跟请求量很大的时候,Redis的集群性能会成为很大的瓶颈。 我们重新设计了一套API流控架构, 混合使用多种流控方案, 按照业务需求自动调整。这里我们拆分为本地流控和集群流控。 对于流量敏感的应用,会要求流控精度越精确,计算及时性高,时间维度低(秒级), 采用本地流控。对于时间周期长, 访问频率较低的API我们采用集群流控, 降低对共享存储的操作频率。注:上图展示具体流控架构,与API网关的集成请参考本章节开头的API网关架构全景。本地流控即单机流控,适用流量敏感型业务。 API按照API-Core集群节点计算Hash值,确保每个API都能负载到其中一个集群节点上。 假设有A, B,C三台API-Core, 如果某个API计算的一致性hash值为A节点, 当请求发送到A节点时直接从这台节点转发,并记录一个流控值, 当请求发送到B/C节点的时候都会转发到A节点计算一个流控值再往后转发。 这样同一个API的流控请求就会全部记录到一台API-Core上。可以借助API-Core的单机流控能力。单机流控的算法也是插件化的,可以采用计数,漏桶等。当然本地流控也会带来一定问题,当所有的API都负载到一个节点上,如果一个API的访问量特别大, 那就可能导致负载不太均匀。还有就是如果流控时间记录很长,比如12次/天, 计数时间周期太长了也不太适合本地流控。集群流控集群流控适用计数周期长, 流控精度要求不高的业务。跟本地流控相辅相成, 按照不同的业务选择不同的流控, 相关的流控处理流程跟上述的本地流控基本相同,但是会在本地会先缓存一段时间的流控数据再统一上报流控中心。基于树形结构的路由遍历算法API网关数据面的主要流程包含路由匹配算法, 路由的所有数据都会缓存在ETCD中,为提升数据面性能, 存储的结构至关重要。在存储过程中我们分为两部分: 域名树, URI树  从第一个树形结构中我们可以遍历到有以下几个域名: www.apig.com, test.com, *.apig.com, *.com。 域名存储从最后一个“.”开始遍历。 举例:  匹配: www.test.com , 先匹配com, 匹配成功继续遍历test, 匹配成功遍历www, 无www匹配失败。  匹配: test.apig.com, 先匹配com, 匹配成功继续遍历apig, 匹配成功遍历test, 无test, 遍历*号, 匹配目标: *.apig.com   URL的匹配为前序匹配跟域名的匹配模式相反,但是遍历算法一致。总结业界主流的开源API网关架构很多,但是开源软件都有一个共同的特点: 量级,安全,运维分析相对匮乏, 真正要满足生产环境需求,还需要投入较高的研发成本。术业有专攻,找一个完善的API管理解决方案对于企业能力变现非常重要。 华为云API网关服务提供完整的API生命周期管理解决方案, 支持多种使用场景, 提供便捷的管理服务。让API的上线,发布,管理到最后售卖的流程不再复杂,快速完成企业能力变现。 欢迎前往体验: 华为云-API 网关     欢迎扫码查看更多精彩:
  • [介绍/入门] API网关体验demo新上线,快来Get新技能吧!
    体验demo链接:https://console.huaweicloud.com/apig/#/apig/expdemo以“电话号码归属地查询”为例,一键式体验demo,一分钟内完成API的开放,有图有真相。1、开始“体验Demo”,后台自动完成API的开放。2、调试API,查看返回结果。3、通过浏览器调用API,查询电话号码的归属地。  通过以下界面查看体验demo创建的API分组详情、API调用情况、修改流控策略方法:查看体验demo创建的API分组详情: 查看体验demo创建的API调用情况(请求次数、调用延迟时间、调用错误次数):修改体验demo创建的流控信息:如果想要了解更多功能,请参见《API网关 用户指南》。