API 文档 - M1k0t0/N2-Station GitHub Wiki

N2 Station API

分为四个大类,INFO,USER,AUTH,CHAT,下方是对于接口的详细说明。

请求HTTP API时,数据提交为json形式

INFO

/api/info

  • GET /api/info/room - 返回json格式的房间列表
{
    "data": [
        "流名称":{
            "id": "流名称",
            "title": "房间标题",
            "desc": "房间描述",
            "image": "图片url",
            "tag": ["tag的内容", "...",],
            "status": "几个状态 暂定open / close",
            "user": {
                "id": "用户uuid",
                "name": "用户名",
                "email": "邮箱"
            },
            "time": {
                "createTime": 创建时间,
                "openTime": 上次开启直播时间,
                "stopTime": 上次结束直播时间
            }
        },
        "流名称": { ... },
    ],
    "action": "getRoomList"
}

POST /api/info/room - 单独返回该房间的信息

data: { "id": "流名称" }
{
    "title": "房间标题",
    "desc": "房间描述",
    "image": "图片url",
    "tag": ["tag的内容", "...",],
    "room_status": "几个状态 暂定open / close", // cnm都快做完了才发现重名了
    "user": {
        "id": "用户uuid",
        "name": "用户名",
        "email": "邮箱"
    },
    "time": {
        "createTime": 创建时间,
        "openTime": 上次开启直播时间,
        "stopTime": 上次结束直播时间
    },
    "action": "searchRoom",
    "status": "暂定0成功 -1房间不存在 -10参数不足 -11未知错误"
}

GET /api/info/user - 获取用户列表

{
    "data": [
        {
            "id": "账号的uuid",
            "name": "用户名",
            "email": "邮箱"    //代替avatar
        },
        { ... }
    ],
    "action": "getUserList"
}

POST /api/info/user - 搜索特定用户

data: { "id": "账号的uuid", "name": "用户名", "email": "邮箱" }
{
    "id": "账号的uuid",	// 三
    "name": "用户名",	    // 选
    "email": "邮箱",		// 一
    "action": "searchUser",
    "status": "暂定0成功 -1用户不存在 -10参数不足 -11未知错误"
}

POST /api/info/getLiveInfo - 获得特定房间的直播信息

临时API,以后可能会做成WS的

data: { "id": "流名称" }
{
    "clients": 114514, // 观看人数
    "room_status": "open", // 房间开播状态
    "bitrate": 1487280, // 直播码率,单位bps
    "action": "getLiveInfo",
    "status": "暂定0成功 -1房间不存在 -10参数不足 -11未知错误"
}

USER

/api/user/

此部分API都需要通过 Cookie 验证Token Cookie格式为 Authorization: token

GET /api/user/rooms - 返回json格式的用户已创建的房间列表

{
    "data": [
        {
            "title": "房间标题",
            "desc": "房间描述",
            "tag": ["tag的内容", "...",],
            "status": "几个状态 暂定open / close",
            "action": "getUserRoomList"
        },
        { ... }
    ],
    "action": "getUserRoomList",
    "status": "0成功 -10参数不全 -11未知错误"
}

POST /api/user/createRoom - 创建房间

data: {
    "id": "流名称",
    "title": "房间标题",
    "desc": "房间描述",
    "image": "图片url",
    "tag": [tag的数组]
}
{
    "action": "createRoom",
    "status": "暂定 0成功 -1已存在 -2已到达创建数量上限 -10参数不全 -11未知错误"
}

POST /api/user/deleteRoom - 删除房间

data: { "id": "流名称" }
{
    "action": "deleteRoom",
    "status": "暂定 0成功 -1房间不存在 -10参数不全 -11未知错误"
}

POST /api/user/openRoom - 房间开始直播

data: { "id": "流名称" }
{
    "action": "openRoom",
    "status": "暂定 0成功 -1房间不存在 -2已到达开启数量上限 -10参数不全 -11未知错误"
}

POST /api/user/closeRoom - 房间停止直播

data: { "id": "流名称" }
{
    "action": "closeRoom",
    "status": "暂定 0成功 -1房间不存在 -10参数不全 -11未知错误"
}

POST /api/user/editRoom - 修改房间信息

与 createRoom 相同
{
    "action": "editRoom",
    "status": "暂定0成功 -1房间不存在 -10参数不全 -11未知错误"
}

AUTH

/api/auth/

密码复杂度要求? 暂定8位以上 有字母+数字 尽量前端验证

POST /api/auth/register - 注册用户

data:{
    "email": "邮箱",
    "name": "账户名",
    "pass": "密码(原文)"
}
{
    "action": "register",
    "status": "暂定0成功 -1邮箱已存在 -2用户名已存在 -3密码强度不足 -4邀请码错误 -10参数不全 -11未知错误",
    "token": "",
    "id": ""
}

POST /api/auth/getToken - 获取Token(登录)

自动把 token 写进 cookie

data:{
    "email": "邮箱",     // 三
    "name": "账户名",   // 选
    "id": "uuid",          // 一
    "pass": "明文(密码)"
}
{
    "action": "getToken",
    "status": "暂定0成功 -1账号或密码错误 -10参数不全 -11未知错误"
}

GET /api/auth/destroyToken - 使Token失效(登出)

在Cookie提供有效token
{
    "action": "destroyToken",
    "status": "暂定0成功 -1token有误 -10参数不全 -11未知错误"
}

POST /api/auth/changeInfo - 更改账户信息

在Cookie提供有效token
data:{
    "email":"",    // 可选
    "name":""      // 可选
}
{
    "action": "changeInfo",
    "status": "暂定0成功 -10参数不全 -11未知错误"
}

POST /api/auth/changePassword - 更改密码

在Cookie提供有效token
data: {
    "oldPass": "密码(原文)",
    "newPass": "密码(原文)"
}
{
    "action": "changePassword",
    "status": "暂定0成功 -1旧密码错误 -10参数不全 -11未知错误"
}

Reset太麻烦 先设计成人工

CHAT

/api/chat/:room

消息结构:<消息类型> <发起用户>[;消息体]

这个api下的所有请求都会被升级为ws协议

当前api协议处于暂定阶段,未来遇到问题可能会大幅修改。

message 消息 - 来自客户端的聊天信息

发送者的前端并不需要立刻渲染该消息,等待服务器的推送指令后再显示即可。

chat 用户名;消息 - 服务端向客户端推送消息

接收到的第一个";"被视为分隔符,之后的被视为消息中的内容。
如果用户名是"0",则代表它是从服务器发来的公告消息。

members 人数 - 服务器向客户端同步房间人数

只有加入房间的时候会发。

join 用户名;当前人数 - 新客户端加入

其他客户端可自定向用户渲染的加入提示消息。

leave 用户名;当前人数 - 客户端退出

其他客户端可自定向用户渲染的退出提示消息。
⚠️ **GitHub.com Fallback** ⚠️