简单URL连接器

连接器简介

1. URL接口是什么

 

软件开发中面对的接口通常有2种:

  • HTTP
  • SOCKET

其中HTTP接口是绝大多数,少量自定义传输格式的SOCKET,通常用于对性能要求极高的场景,或是遗留的老系统。较新的API服务基本都是使用HTTP传输。

 

HTTP接口包括REST的含义,为了在概念上更广一些,我们在这里只说HTTP。互联网上的开放HTTP接口,从认证鉴权上分为两个大类:

    1.1 只需要调用一个URL即可的API。比如一些公司内部使用的url接口不需要签权,稍微严格一点的方式是在URL后面加上密钥。

以百度的【IP定位】接口为例,其地址是 http://wiki.lbsyun.baidu.com/index.php?title=webapi/ip-api  ,它的认证方式如下图:

可以看到认证是在url上加了个密钥串。当然这用的是get方式,如果用post也是一样的,只不过密钥传输的位置不一样。对于这样的接口, 我们可以用postman轻松测试。

 

   1.2 需要对提交内容做加密运算的API。这种方式只用一个url是不够的,因为通常需要加入时间戳进行加密,用postman就很难直接测试,而必须使用服务商的SDK。比如把输入字段按字典排序然后做md5,或是像阿里云那样根据复杂的算法算出一个sign来,我们来看下阿里云的签权加密算法:

 

是不是感觉比较复杂呢?这样的方式自己去拼密钥是很困难的,通常的做法是直接使用它的SDK。但使用SDK又带来新的问题:比如JDK版本、jar包冲突、过多的依赖引用等。

 

上面所说的第一种:只需要调用一个URL即可 的API,我们称其为【URL类型的API】,所有这个类型的API,都可以使用我们的【简单URl连接器】对其进行连接。

上面所说的第二种:需要对提交内容做加密运算 的API,我们称其为【HTTP认证类型的API】,所有这个类型的API,都可以使用我们的【HTTP认证连接器】对其进行连接,这部份会在另外的章节里介绍。

 

2. 常规使用流程

我们直连url接口时的情形如下:

 

在这样的结构中,开发者和接口是1:N的关系。

3. 面临的问题

  • 密钥字段管理

    虽然只是简单地在URL后面放上密钥,但每个接口的密钥字段名、值都是不一样的。如果需要调用多个接口,那开发者就需要在程序中保存、维护这些参数。

  • 权限管理

    在很多情况下,一个账号的密钥可以调用  A、B、C、D多个接口,如果开发者想精细管理,比如某个小组只能调用A,某个小组只能调用BC,这样的情况只能自己编码进行权限管理。

  • IP黑白名单

    哪些IP可以使用您的密钥调用接口,哪些IP不能调用?这个看似简单的功能,很多API服务商却没有提供。

  • 流量、并发控制

    假设一个密钥在多个开发组中共享,每个小组每天能使用多少次调用,并发又能到多少? 因为API服务商通常对密钥有个总流控,您也不希望某个小组代码有问题而把其他小组的业务全阻塞了。

  • 日志记录

    一个密钥在什么时候,什么IP调用了接口,出入参数分别是什么?对不起,目前绝大部份API服务商没有对此记录。当您对调用量有疑问而希望服务商和您对账时,由于日志的缺失,这将是一笔糊涂账。

  • 负载均衡

    比如您同时在用百度和高德的【IP地址查询】接口,由于两个服务的调用额度、并发限制可能不同,您可以在易源设置这两个节点的负载权重从而分流。

  • 映射输入输出字段

    比如您同时在用百度和高德的【IP地址查询】接口,它们的输入和输出字段是不一样的。您可以通过易源对这两个节点的输入和输出做字段映射、代码级转换,从而把它们的输入输出完全统一。

  • 容灾切换

    项目中同时在用ABC三个接口,A挂了就走B,B再挂了就走C。需要定期检测节点的恢复情况。

 

 

4.解决方案

对于上一小节提到的问题,解决如下:

  • 密钥字段管理。

  • 权限管理

     通过连接器创建接入点,设置私有用户调用权限控制可使用哪些后端数据。

 

 

  • IP黑白名单

 

 

 

  • 流量、并发控制

 

 

 

  • 日志记录

 

 

  • 负载均衡

 

  • 映射输入输出字段

 

 

如果单纯的字段映射不能应对复杂情况,我们还可以使用【嵌入代码】方式直接修改输入、输出内容。

 

  • 容灾切换

      某个节点熔断后,易源会根据权重或嵌入的代码,将请求数据转至正常的后端节点。

 

 

5. 性能问题

    如果在同一个局域网下进行压力测试,直连时程序做充分优化,易源中转比直连方式的多消耗时间<1ms。网站或APP的响应时间在100ms-1000ms之间是可以接受的,也就是易源增加的时间是整体流程的0.01至0.001的比率,几乎可以忽略不计。这点开销,就像开车从北京到西安有1000公里,中间因为修路多走了1公里,总共由1000到1001公里,多走这1公里对全局可以忽略不计。

 

 

6. 安全问题

  • 易源平台和您签定合作协议,易源保证关键信息加密存储,保证数据安全不泄露,保证无用户授权绝对不连接数据源。
  • 易源公布对外IP,您可以设置IP白名单。

对于简单URL连接器,易源的IP是:

121.41.60.109

120.26.59.160

120.26.61.225

129.211.129.137

 

 

 

 

 

连接器功能(使用场景)

案例1:使用百度的IP定位接口

我们已经知道了百度的IP定位接口,是这样的调用方式:

https://api.map.baidu.com/location/ip?ip=xx.xx.xx.xx&ak=您的AK&coor=bd09ll

在配置后端服务节点时,我们按下图配置:

案例2:使用京东云市场接口

我们以【快递查询】接口为例,其地址为: 

https://wx.jdcloud.com/market/api/10480

打开后,页面介绍鉴权方式为:

 

然后我们到易源平台创建接入点,在接入点中创建后端节点(可以建多个后端节点,这样可以负载均衡。当然也可以只建1个节点)。

 

请注意实际的后端url是

https://way.jd.com/showapi/order_path?com=yuantong&nu=810606570230&appkey=您申请的APPKEY

那为什么上图中的是

https://way.jd.com/showapi/order_path?appkey=您申请的APPKEY

其中少了com和num参数,这是因为com和nu参数是需要客户端传入的,因此在后端url中不需要设置它们。