Baixing Graph API 0.2 发布

各位Hacker们,

今天乐高时间,我们将要发布一个还没有成型,但是可以初步展示我们要做的东西。大家可以自己先玩一玩。在给大家尝试的地址之前,我先说一下背景。

程序员的工作其实是增加社会财富。

社会财富的增加 = “效率提高” x “杠杆”。

“效率提高”是指是不是有更好的方式解决问题;“杠杆”是指这个提高会被多少人使用。单纯的提高效率如果没有足够长的杠杆,就像自己把自己的自行车洗干净,并没有对社会产生太大的影响;而在百姓网写一段程序,劳动量和洗自己一辆自行车一样,但杠杆长得多。这个杠杆,就是百姓网工程师每一个改动会被成几千万人使用。我们的一个小时劳动会带来几千万人每人节省或者浪费一分钟,这是巨大得社会财富的增加或者浪费。

而还有一个杠杆,就是我们的程序员的工具。工具的每一点提高,就会带来二十几个开发人员的效率的提高,再乘以几千万人,这个杠杆非常的长,产生的影响非常大。这就是工具组的产生的原因。

工具组小排和Hax花了一周的时间,把我们的第一个产品,Graph API的Alpha版本推出。这就是让大家用更加容易的方式访问到百姓网的所有数据和所有功能,且开始尝试建造新的语言,让大家更快的表达要表达的东西。

说到表达,更大家分享一个有趣的例子。前天学会一个新单词:Gape。原文是”I stood there gaping for a few seconds”。 Gape啥意思呢?一查字典,意思是:Stare, with mouth widely open。其实,如果学过编程的话,你会发现这是一个函数定义,

function gape() {

Stare();

Mouth_Widely_Open()

}。

如果你继续查Stare这个函数,定义如下 :

function stare() {

return directly(fixedly(look());

}。

也就是说,语言本来就是不断的定义,产生新的语言。如果小学生,会说look,或者会说“look fixedly and directly”, 如果啰嗦一点的小学生或许会精确的描述为: “look fixedly and directly, with mouth widely open”。但会用gape这个已经定义好的语言,就比啰哩啰嗦的说一大堆是更高级的语言,更加高效的表达了意思(风险是语言版本比较低的人会在脑子里蹦出来undefined function错误)。你会发现当一个人开始用成语和典故的时候,他的表达能力在加强。刚才的例子,gape是比stare更高级的语言,stare高于look,而look高于更底层的,大家没有听说过的语言,叫gaze。

而我们现在的语言,每一个函数,之所以那么长,那么恶心,那么读不懂,就是因为我们只会用php给的那些语言,那些语言不足以让我们表达。我们需要不断的定义class,就像miniChaoge一样,而且要让其他人使用这些class,功能,工具,我们的效率才会提高,才会往高级语言方向前进。

工具组要做的事情就是造语言,造函数,造工具,让大家能用一个词表达,就不要用那么多的词。

好,下面开始讲Graph API.

造语言,一定从最简单却最常用,且最麻烦的地方开始。这就是我选择了数据。如果有统一的方法访问到百姓网所有数据,以及他们之间的联系,大家说话一定会简洁很多。Graph API的一个绰号叫“百姓网数据解放运动”。

在Graph的世界里面,任何对象都是平等的,有一个唯一的ID,叫做gid (Global ID),只要知道gid,就可以用如下两种方式访问:

PHP里面,用graph($gid);

在外面,用http://graph.baixing.com/gid (返回JSON格式)

返回的对象包括所有的属性,并且描述了这个对象的所有属性(包括程序定义的,和Meta里面定义的),以及这个属性的所有的连接(比如Ad就有user,category这样的指向另外一个对象的连接,也有comment,log这样的返回一个数组的连接)。

为了更好的理解Graph,你可以想像百姓网的任何一个对象都是一个八爪鱼,向四面八方伸出触角。这些触角写在connections里面。通过在id后面添加触角的名字,你就访问到了另外一个对象(或者一组对象),从那里又是一个起点,可以继续访问。。。

举一个例子,我们从一个广告开始,227812140。

graph(227812140)

返回这个广告所有的属性。它还有如下的edge:

user -> 连到一个用户对象。

category -> 连到category对象

area -> 连到area对象

ip -> 连到一个关于这个ip信息的对象上。

user, category, area, ip等大多数对象有一个ad连接,可以返回一个数组,包含所有的ad

category,area等树状结构有parent,children等连接,还有一个特殊的path,返回从根到自己的所有对象的一个数组,用户拼面包屑用。

未来,会支持百姓网所有的信息,比如

mobile会支持call,就是呼入call centre 的所有log,通化时长,以及接线员工号等。

ad会支持付费的log

user会支持过去7天内,14天内,一年内的pv,pv在各个类目的分布等等飞哥那里有的所有信息,甚至每一行的访问log

这些只需要一些配置和数据准备工作。

大家应该可以看到这个graph的潜力。我们要让所有百姓网有的数据,和互联网上的数据,用统一的方式访问。比如刚才的ip对象,数据是来自于淘宝的,不是我们自己的数据库。比如:wiki:上海,就指wikipedia上面的上海的文章。通过统一了数据,我们让百姓网的开发速度大幅增快。

好了, 现在大家就可以测试了,请从这里开始,随便点击任何的可以点击的连接,并且注意URL的变化。

http://graph.baixing.com

建议大家用Chrome的Json View来看。Graph API Explorer Has正在写。同时很快大家就可以在chaoge代码里面开始使用

来访问数据了。graph的数据比JSON的数据完整很多。

未来:

在这里一定要强调一下,就是这一层仅仅是整个技术架构中间最最底层的一层,叫做数据层。它仅仅代表数据,但是不代表业务逻辑,不代表前端的展示。还有很多这一层之上的东西。我们需要在这一层之上不断的建设新的层,供上层来用。

工具组会在接下来的一周把这个Alpha变成production级别,可以在线上使用。写操作设计数据一致性,会跟随业务重构一个对象一个对象的支持。

jianshuo

发表评论

邮箱地址不会被公开。 必填项已用*标注