校园社交网络 API设计方法
2014-03-14仲玮范轶代成琴
文/仲玮 范轶 代成琴
校园社交网络 API设计方法
文/仲玮 范轶 代成琴
近些年来,随着社交网络的发展,以校园信息服务为载体的校园社交作为一种新兴媒介开始流传起来。校园社交网络基于社会网络关系思想,将校园网作为平台,实现了校园网内信息应用的社会化数据集成。
在校园社交网络里,为广大开发者和校园用户提供开放数据的开发平台至关重要。使用开发平台提供的API(Application Programming Interface 应用程序接口)可以让用户无须通过Web接口就可以连接到校园社交网络应用之中,并被允许在这个平台上创建新的应用。使得Web、桌面、移动应用的多种操作成为可能,程序开发者的分工更加明确,降低了开发成本。因此,设计一个合理的API系统将有助于丰富校园网应用,构建以校园社交为核心的校园信息体系。
API设计方法
目前API的设计主要存在SOAP和REST两种设计方案。前者基于SOA集成,表现了不同软件构件之间通过各种过程或方法进行的交互,属于面向服务架构;后者则将每个软件构件看作一组数据库表,属于面向资源架构。由于REST具有轻量级应用、输出人工可读的结果集、易于构建、无需工具支持等优点, 目前各大互联网厂商如Google、Twitter等多采取REST方案来构建API。
REST是英文Representational State Transfer(表述性状态转移)的缩写,是近年来迅速兴起的,一种基于HTTP、URI以及XML这些现有协议与标准的,针对网络应用的设计和开发方式。它可以降低开发的复杂度,提高系统的可伸缩性。REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出, 其核心是可编辑的资源及其集合。每个资源或者集合有一个惟一的URI,系统以资源为中心,构建并提供一系列的Web服务。HTTP就是该架构风格的一个典型应用。从其诞生之日开始,它就因其可扩展性和简单性受到越来越多的架构师和开发者们的青睐。
RESTFUL API设计理念
对于校园应用而言,良好的API设计可以提高校园第三方应用开发者的效率,易于用户使用,并具有良好的扩展性。因此,我们的RESTFUL API设计方案应遵循以下基本原则:
1. 将系统上的所有事物都抽象为资源,每个资源对应惟一的资源标识;
2. 简单直观,将通用逻辑以组件的方式展示,遵循RESTful风格;
3. 开发人员友好性。API是一种为开发人员设计的产品,因此API的设计应对第三方程序开发者保持友好,如尽可能支持多种数据返回格式,在浏览器调试中易于输入等;
4. 安全性。尽可能使用标准的安全协议,这样在跨系统对接时会有更好的兼容性。同时充分考虑私有API的认证授权和安全控制,必要的API接口做好访问频率控制。
具体设计方案
校园社交网络的主要用户群体是校园师生用户,均需通过校园统一身份认证进行登录,因此API的身份验证也应以此为基础,通过分享用户信息、社会关系、消息、头像等方式将信息扩展到其他第三方系统。采用分层的方式对公共业务进行设计并提供有效的API供模块通信。在REST风格中,资源标识结构和URI模式的设计与API设计一脉相承,其设计如图1所示。
1.HTTP Method 是REST利用Http实现的对资源的CURD功能,它提供了一个操作资源的统一接口,包括GET/POST/PUT/DELETE等。对于任何资源的操作都应该对应到前面方法中。
2.REST被称为面向资源的开发,这说明对资源的抽象是设计API的一个重要环节。{resources}用于表示校园社交网络API系统的主体资源名,如用户属性、标签、头像、社会关系等,{action_ name}则用于抽象对于资源的操作,同时与HTTP Method相对应,根据HTTP请求实现不同的对象操作。
图1 RESTFUL API的URI设计
社交网络中的资源,在描述了某种事物的同时,有时还存在着一定的层次结构关系。比如,系从属于某个学院,班级从属于系;学生信息可以从属于班级,也可以从属于某个公寓。当资源有这种层次关系的时候,需要使用复合的URI模式来帮助开发者更好地理解和设计资源。
3.开发者在发送一个REST API的请求同时,针对相同的资源根据场景的不同可能会希望得到不同的返回形式。比如使用javascript时希望得到JSON的返回,而使用C++时可能希望得到XML的返回。为了提供这种完备的内容协商能力,在这里设计了{format}参数,使用URI的模式直接用于定义响应和请求中的资源表述格式。
4.参数。在API中URI应设计的尽量简短,这里使用参数的方式用于结果过滤、排序、搜索、分页等相关功能。但过多的参数会导致URL的可读性变差,更有甚者,可能会导致URL过长,使得API请求无法执行。因此参数的设置应在合理的范围内使用,必要时设置别名来代替常用的过滤、搜索请求。
URI是RESTFUL API设计中非常重要的一个环节,在通过URI定义好了资源与允许的操作之后,为实现RESTFUL API,还须在以下几方面进行设计。
API出错处理
REST架构的一个基本要求是保证操作语义的可见性,因此应正确地将API执行结果以及失败的原因以HTTP状态代码的方式传达给客户程序,详细描述操作是否成功、如果出错原因是什么,并采取相应的后续动作。API的错误码可以分为客户端错误和服务器端错误两部分。API应该至少将所有的客户端错误以json形式返回。如图2所示。
API缓存处理
API的缓存处理是提高API使用效率的重要措施。包括model查询结果缓存、URL页面缓存、类对象缓存等。最简单的方式可以采用HTTP自带的缓存框架。HTTP 头中有“Cache-control”字段来控制如何使用缓存,常见的取值有 private、no-cache、max-age、must-revalidate 等。
还有一种缓存方案,即通过支持条件请求与电子标签ETag来处理缓存。当用户请求数据内容时,系统在返回数据的同时,在HTTP头中,将返回根据服务器内容的最后修改时间Last-Modified,或者根据服务器内容生成电子标签ETag。当用户再次请求数据时,就可以在HTTP请求中使用If-Modified-Since或者If-None-Match 头信息,把上次请求得到的时间戳或者电子标签传给服务器。当收到一个有条件请求的HTTP头的REST请求的时候,我们的程序需要将收到的时间戳或者电子标签与当前内容作比较,就可以很容易地知道用户请求的数据内容在这段时间是否发生过修改,并根据比较结果返回给用户最新内容,或者用HTTP响应码304告知用户,内容没有变化。
RESTful API的安全设计
图2 json形式错误信息返回示例
安全设计是API设计中不可回避的一项工作,在这里我们使用OAuth协议用于身份认证。校园社交网络的API相当于授权外部应用访问社交网络站内资源,OAuth协议正适用于此。OAuth协议将与校园网已建设的统一身份认证系统相结合最终为面向最终用户维度的API提供授权。对于身份认证之后的安全控制则主要通过应用控制,采用基于角色的方式来实现资源的访问授权。
除了OAuth认证,还可以辅助使用其他的安全措施。比如对全部参数进行签名防止篡改;在请求中增加一次性的Token,或者短时间内有效的Token;对内容加密防止数据泄露等等。
随着云计算和移动计算的兴起,许多企业愿意在互联网上共享自己的数据、功能,对于校园社交网络也是如此。开放API是大势所趋,通过使用API,开发人员将可很方便地访问社交网络中的的海量内容,可以以编程的方式访问一个特定用户的信息,使得信息的传递存在了无限可能性。
RESTFUL API是校园社交网络系统的基础构架,因此在设计时需要从整个社交网络设计的高度进行思考。REST把软件架构的概念与网络架构的概念相互结合起来,使得之成为可测量的分布式系统的理想状态,提高了信息数据的处理能力和通讯效率。
(作者单位为哈尔滨工业大学网络与信息中心)
OpenSSL漏洞安全提示
OpenSSL是当今应用最广泛的加密软件之一,因此漏洞影响的范围非常广泛,几乎包括所有利用openssl组件来实现ssl功能的服务,具体有:
1. 使用Apache及Nginx两款软件的https服务(tcp 443端口);
2. 使用ssl协议的加密pop3(tcp 995端口),加密SMTP(tcp 465端口)、IMAP(tcp 994端口)的邮件系统;
3.使用ssl协议并使用openssl做组件的vpn(tcp 443端口及1194端口)设备;
4.使用ssl协议的加密及时通讯XMPP(tcp 5222端口);
5.其他基于openssl组件开发的应用加密程序,如在线交易程序等;
需要说明的是,这个漏洞会泄露系统中原本加密的用户名和密码,并且即便被攻击过也不会在系统上留下任何痕迹,因此如果您的系统使用openssl来加密登录过程的话,除了要及时安装补丁程序外,还需要对攻击带来后续影响进行评估。根据我们的检测,只要您的系统存在该漏洞并且不是补丁发布后马上进行升级的,十之八九都被攻击者光顾过了,为安全起见建议通知从漏洞出现(4月7日晚)到您系统升级完后这段时间里登录过系统的用户更改密码,避免账号被他人利用。
(供稿:郑先伟)