差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
后一修订版 两侧同时换到之后的修订记录
im:server:ready:intro [2018/10/12 07:20]
she [入门]
im:server:ready:intro [2018/12/27 07:10]
she [环信服务器基本架构]
行 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 服务。
  
 +----
 ===== 环信服务器基本架构 ===== ===== 环信服务器基本架构 =====
  
行 67: 行 70:
 这样,最开始注册的时候的账号,是这个企业在环信中的企业管理员账号,企业管理员可以创建新的 APP,并创建其他企业管理员。在访问权限上,企业管理员拥有最高的权限,可以看到自己的企业 ID 下所有 APP 中的所有的数据。同时,上面也说过了,同一个企业 ID 下面的 APP 之间,数据也都是相互隔离的,所以完全可以在两个 APP 中创建相同用户名的用户。 这样,最开始注册的时候的账号,是这个企业在环信中的企业管理员账号,企业管理员可以创建新的 APP,并创建其他企业管理员。在访问权限上,企业管理员拥有最高的权限,可以看到自己的企业 ID 下所有 APP 中的所有的数据。同时,上面也说过了,同一个企业 ID 下面的 APP 之间,数据也都是相互隔离的,所以完全可以在两个 APP 中创建相同用户名的用户。
  
-另,如果只是个人开发者开发一个 APP 的话,那么企业 ID 可以随便填写,只需要不和环信现有的企业 ID 重复即可。+另,如果只是个人开发者开发一个 APP 的话,那么企业 ID 可以随便填写,只需要不和环信现有的企业 ID 重复即可。APP 创建成功后将不能由用户手动进行删除,环信默认会保留用户全部的 APP 数据。如果对 APP 删除需要联系环信操作完成
  
 最后,因为环信提供的是 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”–“用户”的层层递进的关系。
行 137: 行 110:
 关于 OAuth 2.0,可以参考[[http://​www.ruanyifeng.com/​blog/​2014/​05/​oauth_2_0.html|理解OAuth 2.0]]。 关于 OAuth 2.0,可以参考[[http://​www.ruanyifeng.com/​blog/​2014/​05/​oauth_2_0.html|理解OAuth 2.0]]。
  
-==== 示例代码 ==== 
  
-环信提供了如何调用 REST 服务的示例代码,可以在[[https://​github.com/​easemob/​emchat-server-examples|这里]]找到。 
  
  
行 149: 行 120:
  
 <WRAP half column> <WRAP half column>
-下一页:[[im:​server:​ready:​user|用户体系集成]]+下一页:[[im:​server:​ready:​releasenote|版本更新]]
 </​WRAP>​ </​WRAP>​
 </​WRAP>​ </​WRAP>​