专栏首页ThoughtWorks再看API设计——从黑客的角度 | TW洞见

再看API设计——从黑客的角度 | TW洞见

今日洞见

文章作者、部分图片来自ThoughtWorks:贺思聪。

本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。

互联网的高速发展以及多终端设备的广泛使用使得前后端分离架构变成了必须,越来越多的网络应用暴露出API以便于前端的使用,RESTFul API的设计成为了业界主流的设计范式。在持续的业务增长以及后端技术的革新中,微服务架构(Microservice)崭露头角,解决了单体应用(Monolithic Application)的诸多问题而越来越流行。现在,在客户端与服务、服务与服务之间,有更多的数据通过常用的json等结构化的方式进行交互。这些交互过程在单体应用中对外并不可见,但在微服务架构下对于却变得透明,黑客可以通过窥探及猜测系统内部的结构,会比以前更容易攻击系统。在这篇文章中,我将以一个数据黑客的角度,展示如何利用API来大规模的获取所要的信息。

数据黑客

数据黑客没有一个准确的定义,在我看来这帮人对于数据具有敏锐的嗅觉;他们尝试得到一切能够获得的数据并进行数据分析;他们尝试在数据的云海中找出规律以便预测未来。在程序员拯救世界的今天,数据黑客则掌握了世界的未来。

在若干年前,前后端分离的架构还尚未普及,很多数据的呈现方式都是直接在页面中打印出来,为了解析数据,数据黑客们使用XPATH去解析数据,将数据装入数据库进行分析,甚至从中赚钱。如今,我们有着大量的API供使用,数据变得唾手可得。我们不用再去繁琐的解析易变的HTML,只需要访问一个URL即可获得我们需要的数据。

10天内获得自由职业网站8百万项目数据

我对自由职业充满了好奇,想试一下自由职业是怎么接到活的。在Freelancer网站上,几乎每分钟都有新的项目发布,一般一分钟之内就有好几个投标信息(bid)。每个投标信息包含了投标的内容、价格以及完成时间,然后雇主根据这些信息来筛选谁可能接这个项目。一般来讲会在交谈之后,明确所有的事宜后,再将项目分配给自由职业者。

作为自由职业者,我们可以看到其他人投标的价格以及别人的信誉度、别人做过的项目等信息,但不能看到具体的投标内容。作为雇主,价格、自由职业者的信誉度、是否通过一些测试可能都是影响雇主是否第一轮筛选进行交谈。那么,通过数据分析,能否回答以下几个问题以便帮助我们正确的投标:

  • 针对投标信息,雇主对自由职业者的信誉度和价格,哪个看得更重?
  • 针对澳洲的雇主,我如何能够增加我被选中的几率,是通过降低价格还是提升自己的质量?

为了回答这些问题,我需要尽快的将网站上所有可能拿到的信息都拿下来进行分析。

网站及API分析

打开一个项目页面(注:你需要访问外国网站),你会看到页面如图所示:

简单的看一下HTML后,发现网站将所有的信息都内嵌到HTML中的一个script中,在浏览器执行完成后会得到project变量。这个变量包含了项目的所有信息,所以理论上讲,我们拿到一个HTML然后解析Javascript,是可以得到我们需要的数据的。

但这种方式也存在一些问题,一来是解析HTML非常费事,二来是执行Javascript也比较繁琐。并且没有一个办法能够遍历所有的项目,可行性并不大。

通常来讲,我不会去解析主网站,因为其防范一般比较严。但很多网站的马奇诺防线在移动端就失效了,Freelancer也不例外。

打开移动端的网页。简单看一下可以知道它是基于AngularJS写的网站。

通过分析API的请求,可以很快的看到API的样子:

我们来分析一下这个URL,红色部分代表了这个项目的简写名字,将其改为其他的项目名称以后能够得到对应的信息。

理论上我只要得到所有项目的简写名字,再用这个地址就可以获得所有的信息了。但且慢,我注意到了投标信息的API:

红色部分用的是一串数字,如果你了解RESTFul API,则很容易知道这个bids的信息是属于9844976项目的。将之前的projects后面的名字变为数字,果然返回ID为9844976的项目的信息,和用简写名字同样的效果。这样的话我就确定了网站每个项目的ID是可以直接访问的,从0开始遍历这个ID即可得到所有网站的信息。

阻力:API访问速度限制

当爬到1000个左右的时候,网站就报告API Rate Limit限制了,大概需要一个小时左右才能再次访问。作为一个大型的网站,API访问速度限制是很平常的事情。如果照这个速度访问,则爬完所有的信息需要将近一年。能不能更快呢?


本文分享自微信公众号 - 思特沃克(ThoughtWorks),作者:贺思聪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-06-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 标准化技术下的软件开发

    聊到集成测试、单元测试等测试分类,我想大多数人都有类似困惑或讨论,集成测试和 E2E 测试到底有啥区别。甚至还有一些系统测试、配置项测试等概念,不但让我们这种非...

    ThoughtWorks
  • API设计的几条原则

    API 设计是微服务设计中非常重要的环节,代表服务之间交互的方式,会影响服务之间的集成。通常来说,一个好的 API 设计需要满足两个主要的目的。

    ThoughtWorks
  • 技术雷达第十九期正式发布——用百余个条目更新你的技能图谱!

    ThoughtWorks每年都会出品两期技术雷达,这是一份关于技术趋势的报告,由ThoughtWorks 技术战略委员会(TAB)经由多番正式讨论给出,它以独特...

    ThoughtWorks
  • R语言实战.2

    开放数据库连接(Open Database Connectivity,ODBC)是为解决异构数据库间的数据共享而产生的,现已成为WOSA(The Windows...

    云深无际
  • 蓝金灵CEO刘文庆:金融科技或将为行业带来革命性颠覆

    数据猿导读 有观点认为,金融科技将成为经济转型和金融业升级的必经之路。同时,金融科技并不仅仅止步于通过新技术来提高金融效率,大数据、人工智能、区块链等技术与金融...

    数据猿
  • 划重点! TensorFlow 2.0 中的符号和命令式 API

    文 / Josh Gordon, Google Developer Advocate

    abs_zero
  • Java Process destroy方法kill进程,返回码测试

    Java代码: package com.spiro; import java.io.IOException; public class Main { ...

    囚兔
  • 大数据下的质量体系建设

    大数据、人工智能是当前也是未来几年IT部门的重点建设方向,新的技术可以为业务突破盈利瓶颈,带来新的增长点,同时我们也发现数据中台也频频在最近的企业财...

    测试开发社区
  • 优化网站加载速度的14个技巧

    优化了加载速度的网站不仅可以提高其搜索引擎的排名,同时也可以降低网站的跳出率,提高其转换率,还能提供更好的终端用户体验,这是当今基于Web环境取得成功的关键。

    大葡萄
  • 医鸣数据使用组合域名 融资近亿元

    11月17日消息 近日,国中创投投资的近亿元人民币对中国医疗大数据平台医鸣数据进行B轮融资,致远资本担任本轮融资独家财务顾问。

    躲在树上的域小名

扫码关注云+社区

领取腾讯云代金券