差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 后一修订版 两侧同时换到之后的修订记录 | ||
im:server:ready:intro [2018/10/12 07:20] she [入门] |
im:server:ready:intro [2018/12/03 07:11] jk |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== 服务端集成介绍 ====== | + | ====== 服务端集成 ====== |
---- | ---- | ||
- | ===== 环信服务器端 REST 平台概述 ===== | + | ===== REST 平台概述 ===== |
- | + | ||
- | ==== 关于 REST ==== | + | |
REST(Representational State Transfer)是一种轻量级的 Web Service 架构风格,可以翻译成“表述性状态转移”,实现和操作明显比 SOAP 和 XML-RPC 更为简洁,可以完全通过 HTTP 协议实现,还可以利用缓存 Cache 来提高响应速度,性能、效率和易用性上都优于 SOAP 协议。 | REST(Representational State Transfer)是一种轻量级的 Web Service 架构风格,可以翻译成“表述性状态转移”,实现和操作明显比 SOAP 和 XML-RPC 更为简洁,可以完全通过 HTTP 协议实现,还可以利用缓存 Cache 来提高响应速度,性能、效率和易用性上都优于 SOAP 协议。 | ||
- | REST 架构遵循了 CRUD 原则,CRUD 原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,对资源的操作包括获取、创建、修改和删除资源的操作正好对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法,因此 REST 把 HTTP 对一个 URL 资源的操作限制在 GET、POST、PUT 和 DELETE 这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。 | + | REST 架构遵循了 CRUD 原则,CRUD 原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,对资源的操作包括获取、创建、修改和删除资源的操作正好对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法,因此 REST 把 HTTP 对一个 URL 资源的操作限制在 POST、GET、PUT 和 DELETE 这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。 |
更多 REST API 背景知识可以参考[[http://www.ruanyifeng.com/blog/2014/05/restful_api.html|RESTful API 设计指南]]。 | 更多 REST API 背景知识可以参考[[http://www.ruanyifeng.com/blog/2014/05/restful_api.html|RESTful API 设计指南]]。 | ||
- | ==== REST 平台体系 ==== | + | ==== 环信 REST 平台 ==== |
- | 平台提供的是一个多租户用户体系,资源以集合(Collection)的形式来描述,这里所说的 Collection 包括 DataBase、企业(orgs)、应用(apps)、IM用户(users)、群组(chatgroups)、消息(chatmessages)、文件(chatfiles)等等,之间的包含关系是: | + | 环信 REST 平台提供的是一个多租户用户体系,资源以集合(Collection)的形式来描述,这里所说的 Collection 包括 DataBase、企业(orgs)、应用(apps)、IM用户(users)、群组(chatgroups)、消息(chatmessages)、文件(chatfiles)等等,之间的包含关系是: |
* DB = {org1, org2, …} | * DB = {org1, org2, …} | ||
行 31: | 行 29: | ||
在环信服务体系中,不同org之间的用户数据相互隔离,同一个 org 下不同 APP 之间的用户数据相互隔离。 | 在环信服务体系中,不同org之间的用户数据相互隔离,同一个 org 下不同 APP 之间的用户数据相互隔离。 | ||
+ | |||
+ | {{ :im:server:ready:image027.png?nolink |}} | ||
+ | |||
==== REST server ==== | ==== REST server ==== | ||
行 49: | 行 50: | ||
|Accept |application/json |服务器端返回给客户端的数据类型| | |Accept |application/json |服务器端返回给客户端的数据类型| | ||
|Content-Type |application/json |客户端发送到服务器端的数据类型| | |Content-Type |application/json |客户端发送到服务器端的数据类型| | ||
- | ==== Java ==== | + | |
+ | ==== JAVA ==== | ||
在 Java 中,REST client 实现方式有多种,比如 JBOss RestEasy、Sun Jersey、Dropwizard、Apache HTTPClient。我们推荐使用 [[https://jersey.java.net/|Jersey]] 来调用环信的 REST 服务。 | 在 Java 中,REST client 实现方式有多种,比如 JBOss RestEasy、Sun Jersey、Dropwizard、Apache HTTPClient。我们推荐使用 [[https://jersey.java.net/|Jersey]] 来调用环信的 REST 服务。 | ||
行 55: | 行 57: | ||
Jersy 2.x 实现了 JAX-RS 2.0 的规范,并且提供了异步的支持,但是 Jersey 2.x 需要 JDK 1.7 的支持,所以如果你的服务器端程序还没有办法使用 JDK 1.7,那么需要使用 Jersey 1.x 的版本。也有很多人直接使用 [[http://hc.apache.org/|Apache Http Client]],我们并不推荐直接使用这个库,主要是因为这个库相对比较底层,需要自己处理的东西很多,API 也相对繁琐。 | Jersy 2.x 实现了 JAX-RS 2.0 的规范,并且提供了异步的支持,但是 Jersey 2.x 需要 JDK 1.7 的支持,所以如果你的服务器端程序还没有办法使用 JDK 1.7,那么需要使用 Jersey 1.x 的版本。也有很多人直接使用 [[http://hc.apache.org/|Apache Http Client]],我们并不推荐直接使用这个库,主要是因为这个库相对比较底层,需要自己处理的东西很多,API 也相对繁琐。 | ||
- | ==== Python ==== | + | ==== PYTHON ==== |
对于 Python 程序,我们推荐使用 [[http://docs.python-requests.org/en/latest/|Requests]] 这个类库来调用环信的 REST 服务。 | 对于 Python 程序,我们推荐使用 [[http://docs.python-requests.org/en/latest/|Requests]] 这个类库来调用环信的 REST 服务。 | ||
+ | ---- | ||
===== 环信服务器基本架构 ===== | ===== 环信服务器基本架构 ===== | ||
行 70: | 行 73: | ||
最后,因为环信提供的是 REST 服务,并且上面说过,REST 本质就是通过 GET/POST/PUT/DELETE 来操作资源(URL),所以,实际上可以看到在环信的 REST API 中,也体现了这种思想。 | 最后,因为环信提供的是 REST 服务,并且上面说过,REST 本质就是通过 GET/POST/PUT/DELETE 来操作资源(URL),所以,实际上可以看到在环信的 REST API 中,也体现了这种思想。 | ||
+ | |||
+ | ==== REST API 示例 ==== | ||
**假设一个企业 ID 为 easemob-demo,然后这个企业下面有个 APP 名字叫做 chatdemoui,那么环信的 REST API 就是下面的样子:** | **假设一个企业 ID 为 easemob-demo,然后这个企业下面有个 APP 名字叫做 chatdemoui,那么环信的 REST API 就是下面的样子:** | ||
- | |||
- | 获取这个 APP 下的所有用户 | ||
- | |||
- | <code http> | ||
- | Path : /easemob-demo/chatdemoui/users | ||
- | HTTP Method : GET | ||
- | Request Headers : { | ||
- | Authorization : Bearer ${token} | ||
- | } | ||
- | </code> | ||
- | |||
- | 获取这个 APP 下的用户 stliu 的详情 | ||
- | |||
- | <code http> | ||
- | Path : /easemob-demo/chatdemoui/users/stliu | ||
- | HTTP Method : GET | ||
- | Request Headers : { | ||
- | Authorization : Bearer ${token} | ||
- | } | ||
- | </code> | ||
在这个 APP 下创建一个新的用户 | 在这个 APP 下创建一个新的用户 | ||
+ | ^{{:im:server:ready:post.png?nolink&90 |}}^/easemob-demo/chatdemoui/users^ | ||
- | 注意: POST的数据需要是JSON格式的,并设置Content-Type 为 application/json。 | + | 获取这个 APP 下的所有用户 |
- | + | ^{{:im:server:ready:get.png?nolink&90 |}}^/easemob-demo/chatdemoui/users^ | |
- | <code http> | + | |
- | Path : /easemob-demo/chatdemoui/users | + | |
- | HTTP Method : POST | + | |
- | Request Headers : { | + | |
- | Content-Type : application/json, | + | |
- | Authorization : Bearer ${token} | + | |
- | } | + | |
- | Request Body : {"username":"stliu1", "password":"123456"} | + | |
- | </code> | + | |
- | 删除一个用户 | + | 修改这个 APP 下的用户 example 的详情信息 |
+ | ^{{:im:server:ready:put.png?nolink&90 |}}^easemob-demo/chatdemoui/users/example^ | ||
- | <code http> | + | 删除这个 APP 下的一个用户 example |
- | Path : /easemob-demo/chatdemoui/users/stliu | + | ^{{:im:server:ready:delete.png?nolink&90 |}}^/easemob-demo/chatdemoui/users/example^ |
- | HTTP Method : DELETE | + | |
- | Request Headers : { | + | |
- | Authorization : Bearer ${token} | + | |
- | } | + | |
- | </code> | + | |
从上面的 URL 的规则中,也能够看出“企业”–“APP”–“用户”的层层递进的关系。 | 从上面的 URL 的规则中,也能够看出“企业”–“APP”–“用户”的层层递进的关系。 | ||
行 149: | 行 122: | ||
<WRAP half column> | <WRAP half column> | ||
- | 下一页:[[im:server:ready:user|用户体系集成]] | + | 下一页:[[im:server:ready:releasenote|版本更新]] |
</WRAP> | </WRAP> | ||
</WRAP> | </WRAP> |