====== 用户关系管理 REST API ======
更新时间:2022-06-30
用户关系管理是用来管理用户之间关系的服务,环信即时通讯 IM 支持通过 REST API 管理用户之间的关系。
===== 前提条件 =====
要调用环信即时通讯 RESTful API,请确保满足以下要求:
* 已在环信即时通讯控制台 [[https://docs-im.easemob.com/ccim/config|开通配置环信即时通讯 IM 服务]]。
* 了解环信 IM REST API 的调用频率限制,详见[[https://docs-im.easemob.com/ccim/limitationapi|接口频率限制]]。
===== 认证方式 =====
环信即时通讯 IM REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 ''%%Authorization%%'' 字段:
Authorization:''%%Bearer ${YourToken}%%''
为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [[https://docs-im.easemob.com/ccim/authentication|使用 App Token 鉴权]]。
===== 公共参数 =====
==== 请求参数 ====
^参数 ^类型 ^是否必需 ^描述 ^
|''%%host%%'' |String |是 |你在环信即时通讯 IM 管理后台注册项目时所在的集群服务器地址。 |
|''%%org_name%%'' |String |是 |即时通讯服务分配给每个企业(组织)的唯一标识。 |
|''%%app_name%%'' |String |是 |你在环信即时通讯 IM 管理后台注册项目时填入的应用名称。 |
|''%%username%%'' |String |是 |用户 ID。 |
|''%%Content-Type%%'' |String |是 |内容类型:''%%application/json%%''。 |
|''%%Authorization%%'' |String |是 |''%%Bearer ${Token}%%'' Bearer 是固定字符,后面加英文空格,再加上获取到的 token 的值。 |
==== 响应参数 ====
^参数 ^类型 ^描述 ^
|''%%entities%%'' |Object |详细信息。 |
|''%%data%%'' |Object |实际获取的数据详情。 |
|''%%uuid%%'' |String |用户在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
|''%%username%%'' |String |用户 ID。 |
|''%%action%%'' |String |请求方式,即接口方法名。 |
|''%%organization%%'' |String |即 ''%%org_name%%'',即时通讯服务分配给每个企业(组织)的唯一标识。 |
|''%%application%%'' |String |应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 |
|''%%applicationName%%'' |String |即 ''%%app_name%%'',你在环信即时通讯 IM 管理后台注册项目时填入的应用名称。 |
|''%%uri%%'' |String |请求 URL。 |
|''%%path%%'' |String |请求路径,属于请求 URL 的一部分,开发者无需关注。 |
|''%%username%%'' |String |用户 ID。 |
|''%%nickname%%'' |String |用户昵称。 |
|''%%timestamp%%'' |Long |Unix 时间戳,单位为毫秒。 |
|''%%duration%%'' |String |请求响应时间,单位为毫秒。 |
用户关系管理的主要接口如下:
===== 添加好友 =====
添加好友,好友必须是和自己在一个 App Key 下的用户。
免费版 App Key 下的每个用户的好友数量上限为 1000,不同版本 App Key 上限不同,具体可参考:[[https://www.easemob.com/pricing/im|版本功能介绍]]。
==== HTTP 请求 ====
POST https://{host}/{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}
=== 路径参数 ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%owner_username%%'' |String |是 |你的用户 ID。 |
|''%%friend_username%%'' |String |是 |要添加的用户 ID。 |
其他参数及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
=== 请求 header ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%Content-Type%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Accept%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Authorization%%'' |String |是 |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。 |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段 ^类型 ^描述 ^
|''%%entities%%'' |Object |用户详情。 |
|''%%entities.uuid%%'' |String |系统内为用户生成的系统内唯一标识,开发者无需关心。 |
|''%%entities.type%%'' |String |接口类型,分为 ''%%user%%'' 和 ''%%group%%'' 两种。 |
|''%%entities.created%%'' |Long |用户创建时间,Unix 时间戳,单位为毫秒。 |
|''%%entities.modified%%'' |Long |用户信息如密码或者昵称等最后修改时间,Unix 时间戳,单位为毫秒。 |
|''%%entities.username%%'' |String |被添加的用户 ID。 |
|''%%entities.activated%%'' |Bool |用户是否被封禁:
• ''%%true%%'' 该用户没有被封禁。
• ''%%false%%'' 该用户已经被封禁。 |
|''%%entities.nickname%%'' |String |用户昵称。 |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将 替换为你在服务端生成的 Token
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'http://XXXX/XXXX/XXXX/users/user1/contacts/users/user2'
=== 响应示例 ===
{
"action": "post",
"application": "8bXXXX402",
"path": "/users/475XXXXba/contacts",
"uri": "https://XXXX/XXXX/XXXX/users/475XXXXba/contacts",
"entities": [
{
"uuid": "b2aXXXXf1",
"type": "user",
"created": 1542356523769,
"modified": 1542597334500,
"username": "user2",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542598913819,
"duration": 63,
"organization": "XXXX",
"applicationName": "testapp"
}
===== 移除好友 =====
从用户的好友列表中移除一个用户。
==== HTTP 请求 ====
DELETE https://{host}/{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username}
=== 路径参数 ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%owner_username%%'' |String |是 |发起操作的用户 ID。 |
|''%%friend_username%%'' |String |是 |被移除好友的用户 ID。 |
其他参数及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
=== 请求 header ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%Accept%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Authorization%%'' |String |是 |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。 |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段 ^类型 ^描述 ^
|''%%entities%%'' |Object |用户详情。 |
|''%%entities.uuid%%'' |String |系统内为用户生成的系统内唯一标识,开发者无需关心。 |
|''%%entities.type%%'' |String |接口类型,分为 user 和 group 两种。 |
|''%%entities.created%%'' |Long |用户创建时间,Unix 时间戳,单位为毫秒。 |
|''%%entities.modified%%'' |Long |用户信息如密码或者昵称等最后修改时间,Unix 时间戳,单位为毫秒。 |
|''%%entities.username%%'' |String |被添加的用户 ID。 |
|''%%entities.activated%%'' |Bool |用户是否被封禁:
• ''%%true%%'' 该用户没有被封禁。
• ''%%false%%'' 该用户已经被封禁。 |
|''%%entities.nickname%%'' |String |用户昵称。 |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将 替换为你在服务端生成的 Token
curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'http://XXXX/XXXX/XXXX/users/user1/contacts/users/user2'
=== 响应示例 ===
{
"action": "delete",
"application": "8bXXXX402",
"path": "/users/475XXXXba/contacts",
"uri": "https://XXXX/XXXX/XXXX/users/475XXXXba/contacts",
"entities": [
{
"uuid": "b2aXXXXf1",
"type": "user",
"created": 1542356523769,
"modified": 1542597334500,
"username": "user2",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542599266616,
"duration": 350,
"organization": "XXXX",
"applicationName": "testapp"
}
===== 获取好友列表 =====
获取用户的好友列表。
==== HTTP 请求 ====
GET https://{host}/{org_name}/{app_name}/users/{owner_username}/contacts/users
=== 路径参数 ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%owner_username%%'' |String |是 |好友列表所有者的用户 ID。 |
其他参数及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
=== 请求 header ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%Content-Type%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Accept%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Authorization%%'' |String |是 |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。 |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段 ^类型 ^说明 ^
|''%%data%%'' |Array |“user1”, “user2”,获取到的好友列表。 |
|''%%entities%%'' |Object |预留参数。 |
|''%%count%%'' |Int |计数,好友数量。 |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将 替换为你在服务端生成的 Token
curl -X GET 'http://XXXX/XXXX/XXXX/users/user1/contacts/users' \
-H 'Authorization: Bearer '
=== 响应示例 ===
{
"action": "get",
"uri": "http://XXXX/XXXX/XXXX/users/user1/contacts/users",
"entities": [],
"data": [
"user3",
"user2"
],
"timestamp": 1543819826513,
"duration": 12,
"count": 2
}
===== 添加黑名单 =====
向用户的黑名单列表中添加一个或者多个用户,黑名单中的用户无法给该用户发送消息,每个用户的黑名单人数上限为 500。
==== HTTP 请求 ====
POST https://{host}/{org_name}/{app_name}/users/{owner_username}/blocks/users
=== 路径参数 ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%owner_username%%'' |String |是 |你的用户 ID。 |
其他参数及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
=== 请求 header ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%Content-Type%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Accept%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Authorization%%'' |String |是 |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。 |
=== 请求 body ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%usernames%%'' |Array |是 |[“user1”, “user2”] 需要加入到黑名单中的用户 ID 以数组方式提交。 |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段 ^类型 ^说明 ^
|''%%data%%'' |Array |添加至黑名单的用户 ID。 |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将 替换为你在服务端生成的 Token
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{
"usernames": [
"user2"
]
}' 'http://XXXX/XXXX/XXXX/users/user1/blocks/users'
=== 响应示例 ===
{
"action": "post",
"application": "8bXXXX402",
"uri": "https://XXXX.com/XXXX/testapp",
"entities": [],
"data": [
"user2"
],
"timestamp": 1542600372046,
"duration": 11,
"organization": "XXXX",
"applicationName": "testapp"
}
===== 获取黑名单 =====
获取黑名单列表。
==== HTTP 请求 ====
GET https://{host}/{org_name}/{app_name}/users/{owner_username}/blocks/users
=== 路径参数 ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%owner_username%%'' |String |是 |当前用户的用户 ID。 |
其他参数及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
=== 请求 header ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%Accept%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Authorization%%'' |String |是 |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。 |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^字段 ^类型 ^说明 ^
|''%%data%%'' |Array |“user1”, “user2”,获取到的黑名单列表。 |
|''%%entities%%'' |Object |黑名单用户的详情。 |
|''%%count%%'' |Int |计数,好友数量。 |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将 替换为你在服务端生成的 Token
curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'http://XXXX/XXXX/XXXX/users/user1/blocks/users'
=== 响应示例 ===
{
"action": "get",
"uri": "http://XXXX/XXXX/XXXX/users/user1/blocks/users",
"entities": [],
"data": [
"user2"
],
"timestamp": 1542599978751,
"duration": 4,
"count": 1
}
===== 移除黑名单 =====
从用户的黑名单中移除用户。将用户从黑名单移除后,恢复到好友,或者未添加好友的用户关系。可以正常的进行消息收发。
==== HTTP 请求 ====
DELETE https://{host}/{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username}
=== 路径参数 ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%owner_username%%'' |String |是 |当前用户的用户 ID。 |
|''%%blocked_username%%'' |String |是 |需移除的黑名单用户 ID。 |
其他参数及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
=== 请求 header ===
^参数 ^类型 ^是否必需 ^描述 ^
|''%%Accept%%'' |String |是 |内容类型。请填 ''%%application/json%%''。 |
|''%%Authorization%%'' |String |是 |该用户或管理员的鉴权 token,格式为 ''%%Bearer ${token}%%'',其中 ''%%Bearer%%'' 是固定字符,后面加英文空格,再加获取到的 token 值。 |
==== HTTP 响应 ====
=== 响应 body ===
如果返回的 HTTP 状态码为 ''%%200%%'',表示请求成功,响应包体中包含以下字段:
^参数 ^类型 ^描述 ^
|''%%entities%%'' |Object |从黑名单中移除的用户的详细信息。 |
|''%%entities.uuid%%'' |String |用户在系统内的唯一标识。系统自动生成,开发者无需关心。 |
|''%%entities.type%%'' |String |接口类型,分为 user 和 group 两种。 |
|''%%entities.created%%'' |Long|用户创建时间,Unix 时间戳,单位为毫秒。 |
|''%%entities.modified%%'' |Long|用户信息如密码或者昵称等最后修改时间,Unix 时间戳,单位为毫秒。|
|''%%entities.username%%'' |String |被移出黑名单的用户 ID。 |
|''%%entities.activated%%'' |Bool|用户是否被封禁:
• ''%%true%%'' 该用户正常。
• ''%%false%%'' 该用户被封禁。 |
|''%%entities.nickname%%'' |String |用户昵称。 |
其他字段及说明详见[[https://docs-im.easemob.com/ccim/rest/relationship#公共参数|公共参数]]。
如果返回的 HTTP 状态码非 ''%%200%%'',表示请求失败。你可以参考[[https://docs-im.easemob.com/ccim/rest/errorcode|响应状态码]]了解可能的原因。
==== 示例 ====
=== 请求示例 ===
# 将 替换为你在服务端生成的 Token
curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'http://XXXX/XXXX/XXXX/users/user1/blocks/users/user2'
=== 响应示例 ===
{
"action": "delete",
"application": "8bXXXX402",
"path": "/users/475XXXXba/blocks",
"uri": "https://XXXX/XXXX/XXXX/users/475XXXXba/blocks",
"entities": [
{
"uuid": "b2aXXXXf1",
"type": "user",
"created": 1542356523769,
"modified": 1542597334500,
"username": "user2",
"activated": true,
"nickname": "testuser"
}
],
"timestamp": 1542600712985,
"duration": 20,
"organization": "XXXX",
"applicationName": "testapp"
}