环信_入门

环信服务器端REST平台概述

关于REST

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 API背景知识可以参考这篇RESTful API 设计指南

REST平台体系

平台提供的是一个多租户用户体系,资源以集合【Collection】的形式来描述,这里所说的Collection包括DataBase、企业(orgs)、应用(apps)、IM用户(users)、群组(chatgroups)、消息(chatmessages)、文件(chatfiles)等等,之间的包含关系是

DB = {org1, org2, …} org = {app1, app2, …} app = {users, messages, chatfiles, chatmessages, chatgroups, …} users = {user1, user2, …} messages = {message1, message2, …} chatfiles = {chatfile1, chatfile2, …} chatmessages = {chatmessage1, chatmessage2, …} chatgroups = {group1, group2, …} 多租户是指软件架构支持一个实例服务多个用户(Customer),每一个用户被称之为租户(Tenant),软件给予租户可以对系统进行部分定制的能力,如用户界面颜色或业务规则,但是他们不能定制修改软件的代码.

其实在云计算领域,多租户的含义已被扩展.例如,软件即服务(SaaS)提供者,利用运行在一个数据库实例上的应用系统,向多个用户提供Web访问服务.在这样的场景下,租户之间的数据是隔离的,并且保证每个用户的数据对其他租户不可见.

在环信服务体系中,不同org之间的用户数据相互隔离,同一个org下不同app之间的用户数据相互隔离.

REST Server

环信的服务器端接口都是通过REST服务方式提供的, REST API基于最简单的HTTP协议, 在各个编程语言中都提供了良好的支持.

REST client

REST client就是调用REST API的程序端,可以使调用方式有多种:Linux curl、浏览器、编程语言http请求访问实现等.

调用REST API, 本质就是发送HTTP请求, 只不过大家常用的可能是 HTTP GET 和 HTTP POST_请求, 但是在REST 里面还经常用到 _HTTP PUT 和 HTTP DELETE, 在REST中, 把这四种操作称之为动词, 可以(不是特别准确)的想象成增删改查.

而动词所操作的对象, 在REST中, 被称之为_资源, 也就是_URL, 而这些也都是标准的HTTP协议的内容. 实际上, 当我们在浏览器中打开一个网站的时候, 例如, 打开www.easemob.com, 浏览器实际上发送给网站服务器的, 就是一个HTTP GET的请求.

需要注意的是, 环信的REST API都是基于json的, 所以在构造_HTTP_ 请求的时候, 需要在_HTTP HEADER_中指明:

header_name header_value description
Accept application/json 服务器端返回给客户端的数据类型
Content-Type application/json 客户端发到服务器端的是数据类型

Java

在Java中, REST Client实现方式有多种,比如JBOss RestEasy、 Sun Jersey、Dropwizard、Apache HTTPClient.我们推荐使用Jersey来调用环信的REST服务, Jersy 2.x实现了JAX-RS 2.0的规范, 并且提供了异步的支持, 但是Jersey 2.x需要JDK 1.7的支持, 所以如果你的服务器端程序还没有办法使用JDK 1.7, 那么需要使用 Jersey 1.x的版本.也有很多人直接使用Apache Http Client, 我们并不推荐直接使用这个库, 主要是因为这个库相对比较底层, 需要自己处理的东西很多, API也相对繁琐.

Python

对于python程序, 我们推荐使用request这个类库来调用环信的REST服务.

环信服务器基本架构

当用户在环信开发者管理后台中注册的时候, 需要填写一个”企业ID”, 这是因为环信是一个支持多租户的云服务平台, 并且环信是支持”企业”(或者理解成团队)-“App”两级结构的.即, 在环信平台中, 每个企业ID之间的数据都是严格相互隔离的, 而每个企业ID内部的每个App之间的数据, 也都是严格相互隔离的.

可以想象这样的模型:一个公司中有三个部门, 每个部门负责一个App, 那么这个公司可以注册一个环信的账号, 然后在这个账号的名下创建三个(环信中的)App, 每个环信中的app对应一个部门的app.

这样, 最开始注册的时候的账号, 是这个企业在环信中的企业管理员账号, 企业管理员可以创建新的app, 并且指派app管理员账号, 在访问权限上, 企业管理员拥有最高的权限, 可以看到自己的企业ID下所有app中的所有的数据, 而app管理员则只能看到自己app中的数据, 看不到其它app中的数据. 同时, 上面也说过了, 同一个企业id下面的app之间, 数据也都是相互隔离的, 所以完全可以在两个app中创建相同用户名的用户.

另, 如果只是个人开发者开发一个app的话, 那么企业id可以随便填写, 只需要不和环信现有的企业id重复即可.

最后, 因为环信提供的是REST服务, 并且上面说过, REST本质就是通过 GET / POST / PUT /DELETE 来操作资源(URL), 所以, 实际上可以看到在环信的REST API中, 也体现了这种思想.

假设一个企业id为 easemob-demo, 然后这个企业下面有个app名字叫做 chatdemoui, 那么环信的REST API就是下面的样子

获取这个app下的所有用户

Path : /easemob-demo/chatdemoui/users
HTTP Method : GET
Request Headers : {
    	Authorization : Bearer ${token}
}

获取这个app下的用户stliu的详情

Path : /easemob-demo/chatdemoui/users/stliu
HTTP Method : GET
Request Headers : {
	   Authorization : Bearer ${token}
}

在这个app下创建一个新的用户

Path : /easemob-demo/chatdemoui/users
HTTP Method : POST
Request Headers : {
	   Content-Type : application/json,
	   Authorization : Bearer ${token}
}
Request Body : {"username":"stliu1", "password":"123456"}
//注意: post的数据需要是json格式的, 并设置Content-Type 为 application/json

删除一个用户

Path : /easemob-demo/chatdemoui/users/stliu
HTTP Method : DELETE
Request Headers : {
    	Authorization : Bearer ${token}
}

从上面的URL的规则中, 也能够看出”企业”–“app”–“用户”的层层递进的关系.

名词解释

名词 解 释
org_name 企业的唯一标识,开发者在环信开发者管理后台注册账号时填写的企业ID
app_name 同一”企业”下”app”唯一标识,开发者在环信开发者管理后台创建应用时填写的”应用名称”
org_admin 开发者在环信开发者管理后台注册时填写的”用户名”.企业管理员拥有对该企业账号下所有资源的操作权限
app_admin 应用管理员,具有admin权限的一个特殊IM用户,拥有对该应用下所有资源的操作权限
appkey 一个app的唯一标识,规则是 ${org_name}#${app_name}

安全

环信的REST服务完全是基于HTTPS的安全协议, 从协议层面保证了在调用的时候, 不会被别人窃取到.

环信的后台服务API在安全上, 是基于 OAuth 2.0标准的和RBAC(基于角色的访问控制)的权限模型的

在调用环信的后台服务之前, 需要先登陆获取token, 而根据请求发起人的角色不同, 获取token的方式也不同

关于OAuth 2.0, 可以参考这篇理解OAuth 2.0

示例代码

环信提供了如何调用REST服务的示例代码, 可以在这里找到.

时间: 2024-10-30 09:32:37

环信_入门的相关文章

013.消息_环信

最近任务是环信的群组功能,记录所思以备后用. 0.消息 消息是IM中交互的实体,在SDK中对应的类型是EMMessage,EMMessage可以由多个符合<IEMMessageBody>协议的body组成,文档中还提到强力建议使用一个body,多个body存在bug /*! @method @brief 创建消息实例(用于:创建一个新的消息) @discussion 消息实例会在发送过程中内部状态发生更改,比如deliveryState @param receiver 消息接收方 @param

李洪强iOS开发之-环信02.2_环信官网下载环信 SDK

李洪强iOS开发之-环信02.2_环信官网下载环信 SDK 移动客服即时通讯云 iOS SDK 当前版本:V3.1.4 2016-07-08 [ 版本历史 ] | 开发指南 | 知识库 | Demo源码 | 最新SDK下载Demo扫码安装 切换至v2.x版本 iOS SDK v2.x 当前版本:V2.2.6 2016-06-28 [ 版本历史 ] | 开发指南 | 知识库 | Demo源码 | 最新SDK下载Demo扫码安装 返回v3.x版本 Android SDK 当前版本:V3.1.4 20

[Java]直播方案----[接入环信聊天室]+[腾讯云直播]

辛辛苦苦写的,转载请注明一下,这点信任我想还是有的吧,谢谢了. http://www.cnblogs.com/applerosa/p/7162268.html 之前做了直播,一直没时间写,好不容易闲下来,所以总结记录一下. 需要注意的是,在获取环信聊天室ID和腾讯云三个推/拉流地址的时候,需要先去注册,获取所用开发者账号. 所以这个教程所必须的东西: 1.环信开发者账号; 2.腾讯云开发者账号; 一.做直播,肯定要有一个直播模型,这里我们用直播间来做示例: 这里只是做个基础的演示,所以都是必须的

Vue 集成环信 全局封装环信WebSDK 可直接使用

Step1.安装 easemob-websdk npm install --save easemob-websdk Step2.安装 strophe.js    underscore    crypto-js npm install --save strophe.js underscore crypto-js Step3.使用 新建一个webim.js import store from '@/store' window.Strophe = require('strophe.js').Strop

Vue 集成环信 全局封装环信WebSDK

1 安装 npm install easemob-websdk --save 官方安装 ,这种安装要在依赖包配置初始化链接,提交代码时并没把配置提交 使用 hx-websdk 安装 npm install --save hx-websdk  2 .使用 新建一个webim.js  放在聊天窗口组件同一层级,为了Emoji图片路径同步 import store from '@/store/store' // window.Strophe = require('strophe.js').Stroph

iOS: 环信的推送

原文:http://m.blog.csdn.net/article/details?id=38824551 1.先创建一个apns证书,链接如下 http://developer.easemob.com/docs/emchat/ios/push/certificate.html 创建完证书后,将证书弄成p12文件,然后上传到环信后台 2.再创建真机调试证书,和描述文件,保证能进行真机调试.并且appid要又推送功能 3.绑定环信证书和appkey //注册 APNS文件的名字, 需要与后台上传证

iOS 环信集成问题(连文档都不说明的坑。。)

首先,关于环信SDK的下载和一些依赖库的添加,在此我就不做详细介绍,(http://www.easemob.com/download/im)附上环信官网文档,可以看一下,上面都可以下载,也有相关配置介绍. 今天主要说一下,环信集成遇到的各种坑,各种问题,有的连文档都不说明的坑..(主要是讲解完全集成环信,UI的聊天界面,单聊功能也是环信的这种情况) 各位可能刚在官网下载下来ChatDemo-UI3.0这个版本,会发现HyphenateFullSDK和官网文档有个不一样的地方,少了个文件(libH

即时聊天-环信

在Xcode项目中,怎样导入即时通讯步骤如下:(Xcode突然崩溃这是我第二遍写,没谁了) 1.下载SDK 一般情况下我们使用SDK时都会下载最新版本的下面以V3.1.1为例 2.导入下载好的SDK 这一步把导入文件倒入到项目文件中,记得要勾选上Copy items if  needed  噢! 3.添加依赖库 点击Buide Phases中的Link Binary With Libraries 4.运行编译器,检查是否报错 这一步真机和模拟器运行结果是不一样的,要看清楚 5. 真机错误修复 6

算法竞赛_入门经典_刘汝佳__(2)

1,有几位数字 #include<stdio.h> int main_2_1_digit(){ int n; while(scanf("%d",&n)){ int count = 0; if(n==0) count = 1; while(n){ count++; n/=10; } printf("%d\n",count); } return 0; } 2,三位数的三个数字 #include<stdio.h> int main_2_2_