AppServer设计

[TOC]

RESTful

  1. Representational State Transfer,表现层状态转换。
  2. 资源指一个互联网的实体,比如一个图片,一篇文章。每个URI代指一个唯一的实体。
  3. 表现层指一个实体的呈现形式,比如图片的jpg或者png格式,或者它的缩略图形式,thumb.jpg。这些都不应该在URI中体现,而应该在头信息中。
  4. 状态转换,让服务器端进行状态转换,有GET,POST,PUT,DELETE等。
  5. 所以在一个URI中不应该体现出和实体无关的东西,比如/1/delete就是不符合的。
  6. 版本信息可以放到URI中。

用户登录相关

RESTful最重要的一个设计原则就是,客户端和服务器的交互是无状态的。每次都需要带上身份信息。

  1. 传统浏览器使用cookie和session。在APP中,服务器端建立一个映射就行,比如uid5对应3n4tef344nfed,登陆后分配一个token值,使用token值来识别用户。使用HTTPs协议防止token值被截获。
  2. 没有HTTPs的情况下,可以使用如下方法加密:

    请求test.com/user/info,使用md5(“test.com/user/info&token=daf32da456hfdh”)= C99DC0C22437AC275C08CE4A9708B25A的签名,

    然后请求test.com/user/info?userId=5&sign= C99DC0C22437AC275C08CE4A9708B25A,

    服务器端收到请求后,用同样的算法算出签名,如果一致就通过。

  3. 上面的方法有一个问题,就是可能被人截获后重复提交,所以解决方法是加上时间戳,

    md5(“test.com/user/info?userId=5&token=daf32da456hfdh&timestamp=1425860757”)= C116161A6F430343B6CECF08562F1371

    然后请求test.com/user/info?userId=5&timestamp=1425860757&sign= C116161A6F430343B6CECF08562F1371

    这样带上时间戳,时间戳是不能被修改的,否则签名无效,

    服务器收到请求后,先检测时间是否符合预期范围内,然后比对签名。

  4. 上面的方法在第一次获取token的时候还是有风险,这时可以使用对称加密来解决,AES加密。

上面这是内部接口,一般外部接口还是用Auth2.0.

← 深入理解计算机系统  破解联通HG8346R →