对接声网rtc-restful-api

简介: 对接声网rtc-restful-api

代码如下:

package com.example.agora.api.webclient;

import com.alibaba.nacos.common.utils.JacksonUtils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.example.agora.api.constant.agora.RtcRequestConst;
import com.example.agora.api.pojo.dto.RtcAddKickRuleDTO;
import com.example.agora.api.pojo.dto.RtcDelKickRuleDTO;
import com.example.agora.api.pojo.dto.RtcUpdateKickRuleDTO;
import com.example.agora.api.pojo.vo.rtc.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

import java.util.Base64;

@Service
public class AgoraRtcClient {

    private final WebClient webClient;
    @Value("${agora.rtc.app-id}")
    private String appId;
    @Value("${agora.rtc.api-key}")
    private String apiKey;
    @Value("${agora.rtc.api-secret}")
    private String apiSecret;

    @Autowired
    public AgoraRtcClient(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("http://api.sd-rtn.com").build();
    }

    private String getAuthorization() {
        // 拼接客户 ID 和客户密钥并使用 base64 编码
        String plainCredentials = apiKey + ":" + apiSecret;
        String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes()));
        // 创建 authorization header
        return "Basic " + base64Credentials;
    }

    /**
     * 封禁用户权限-创建规则
     * <a href="https://docportal.shengwang.cn/cn/All/rtc_channel_management_restfulapi?platform=Android#%E5%B0%81%E7%A6%81%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90">
     */
    public Mono<RtcQueryKickRuleRes> getRtcKickRule() {
        return webClient.get().uri("/dev/v1/kicking-rule?appid={appId}", appId)
                .header(RtcRequestConst.AUTHORIZATION_KEY, getAuthorization())
                .retrieve().bodyToMono(String.class)
                .map(str -> JacksonUtils.toObj(str, new TypeReference<>() {
                }));
    }

    /**
     * 封禁用户权限-获取规则列表
     * <a href="https://docportal.shengwang.cn/cn/All/rtc_channel_management_restfulapi?platform=Android#%E8%8E%B7%E5%8F%96%E8%A7%84%E5%88%99%E5%88%97%E8%A1%A8">
     */
    public Mono<RtcAddDelKickRuleRes> addRtcKickRule(RtcAddKickRuleDTO dto) {
        dto.setAppId(appId);
        return webClient.post().uri("/dev/v1/kicking-rule")
                .header(RtcRequestConst.AUTHORIZATION_KEY, getAuthorization())
                .bodyValue(dto).retrieve().bodyToMono(String.class)
                .map(str -> JacksonUtils.toObj(str, new TypeReference<>() {
                }));
    }

    /**
     * 封禁用户权限-更新规则
     * <a href="https://docportal.shengwang.cn/cn/All/rtc_channel_management_restfulapi?platform=Android#%E6%9B%B4%E6%96%B0%E8%A7%84%E5%88%99">
     */
    public Mono<RtcAddDelKickRuleRes> delRtcKickRule(RtcDelKickRuleDTO dto) {
        dto.setAppId(appId);
        return webClient.method(HttpMethod.DELETE).uri("/dev/v1/kicking-rule")
                .header(RtcRequestConst.AUTHORIZATION_KEY, getAuthorization())
                .bodyValue(dto).retrieve().bodyToMono(String.class)
                .map(str -> JacksonUtils.toObj(str, new TypeReference<>() {
                }));
    }

    /**
     * 封禁用户权限-删除规则
     * <a href="https://docportal.shengwang.cn/cn/All/rtc_channel_management_restfulapi?platform=Android#%E5%88%A0%E9%99%A4%E8%A7%84%E5%88%99">
     */
    public Mono<RtcAddDelKickRuleRes> updateRtcKickRule(RtcUpdateKickRuleDTO dto) {
        dto.setAppId(appId);
        return webClient.put().uri("/dev/v1/kicking-rule")
                .header(RtcRequestConst.AUTHORIZATION_KEY, getAuthorization())
                .bodyValue(dto).retrieve().bodyToMono(String.class)
                .map(str -> JacksonUtils.toObj(str, new TypeReference<>() {
                }));
    }

    /**
     * 查询在线频道信息-查询用户状态
     * <a href="https://docportal.shengwang.cn/cn/All/rtc_channel_management_restfulapi?platform=Android#%E6%9F%A5%E8%AF%A2%E7%94%A8%E6%88%B7%E7%8A%B6%E6%80%81">
     */
    public Mono<RtcUserInfoRes> getRtcUserInfo(Long uid, String channelName) {
        return webClient.get().uri("/dev/v1/channel/user/property/{appid}/{uid}/{channelName}", appId, uid, channelName)
                .header(RtcRequestConst.AUTHORIZATION_KEY, getAuthorization())
                .retrieve().bodyToMono(String.class)
                .map(str -> JacksonUtils.toObj(str, new TypeReference<>() {
                }));
    }

    /**
     * 查询在线频道信息-查询用户列表
     * <a href="https://docportal.shengwang.cn/cn/All/rtc_channel_management_restfulapi?platform=Android#%E6%9F%A5%E8%AF%A2%E7%94%A8%E6%88%B7%E5%88%97%E8%A1%A8">
     */
    public Mono<RtcUserInfosRes> getRtcUserInfos(String channelName, boolean hostsOnly) {
        return webClient.get().uri("/dev/v1/channel/user/{appid}/{channelName}" + (hostsOnly ? "/hosts_only" : ""),
                        appId, channelName)
                .header(RtcRequestConst.AUTHORIZATION_KEY, getAuthorization())
                .retrieve().bodyToMono(String.class)
                .map(str -> JacksonUtils.toObj(str, new TypeReference<>() {
                }));
    }

    /**
     * 查询在线频道信息-查询项目的频道列表
     * <a href="https://docportal.shengwang.cn/cn/All/rtc_channel_management_restfulapi?platform=Android#%E6%9F%A5%E8%AF%A2%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%A2%91%E9%81%93%E5%88%97%E8%A1%A8">
     */
    public Mono<RtcChannelInfosRes> getRtcChannelInfos() {
        return webClient.get().uri("/dev/v1/channel/{appid}", appId)
                .header(RtcRequestConst.AUTHORIZATION_KEY, getAuthorization())
                .retrieve().bodyToMono(String.class)
                .map(str -> JacksonUtils.toObj(str, new TypeReference<>() {
                }));
    }

}

使用的是webclient实现反应式请求,注意响应判断请求是否成功也分为两种

package com.example.agora.api.pojo.vo.rtc;

/**
 * BaseRtcRes
 *
 * @author VampireAchao<achao @ hutool.cn>
 * @since 2023/11/14
 */
public interface BaseRtcRes {
    boolean isSuccess();
}

第一种是用statussuccess判断

package com.example.agora.api.pojo.vo.rtc;

import com.example.agora.api.constant.agora.RtcResponseConst;
import lombok.Data;

/**
 * BaseRtcStatusRes
 *
 * @author VampireAchao<achao @ hutool.cn>
 * @since 2023/11/13
 */
@Data
public abstract class BaseRtcStatusRes implements BaseRtcRes {
    private String status;

    @Override
    public boolean isSuccess() {
        return RtcResponseConst.SUCCESS.equals(status);
    }
}

第二种是拿successtrue判断

package com.example.agora.api.pojo.vo.rtc;

import lombok.Data;
import org.dromara.streamquery.stream.core.variable.BoolHelper;

/**
 * BaseRtcStatusRes
 *
 * @author VampireAchao<achao @ hutool.cn>
 * @since 2023/11/13
 */
@Data
public abstract class BaseRtcSuccessRes implements BaseRtcRes {
    private Boolean success;

    @Override
    public boolean isSuccess() {
        return BoolHelper.isTruthy(success);
    }
}

其他的实体类就建议自行创建吧

相关文章
|
3天前
|
机器人 API
Eolink神技之三、钉钉API对接
Eolink神技之三、钉钉API对接
68 0
|
3天前
|
SQL 缓存 测试技术
API接口对接中需要注意的问题(4)
有几个关键的问题需要注意,它们涉及安全性、性能、数据一致性和错误处理等方面
|
3天前
|
JSON 监控 API
在API接口对接中关键示例问题(1)
在API接口对接中,有几个关键的问题需要注意,以确保接口的稳定性、安全性和易用性。以下是这些问题及部分示例代码的简要概述
|
3天前
|
人工智能 JavaScript API
互联网人的福利!『昆仑天工』4款AI产品开源!提供API对接!
互联网人的福利!『昆仑天工』4款AI产品开源!提供API对接!
259 0
|
3天前
|
API 开发工具 数据安全/隐私保护
API接口的对接流程和注意事项(淘宝商品详情店铺)
随着互联网技术的发展和应用的普及,API接口已经成为不同系统、不同应用之间进行交互和数据交换的重要方式。API接口使得不同的系统能够互相调用对方的功能,提高了系统的灵活性和扩展性。但是,在进行API接口对接的过程中,需要注意一些流程和事项,以确保对接的顺利进行和系统的稳定运行。
|
3天前
|
JSON 前端开发 API
API商品接口对接使用:从理论到实践
随着电子商务的飞速发展,API商品接口已成为现代电子商务应用程序不可或缺的一部分。通过API商品接口,开发者可以轻松地从其他应用程序或服务中获取商品信息,实现快速、高效的电子商务功能。本文将探讨API商品接口的概念、对接使用的方法以及一个实际案例。
|
3天前
|
API 开发工具 数据安全/隐私保护
API接口的对接流程和注意事项
随着互联网技术的发展和应用的普及,API接口已经成为不同系统、不同应用之间进行交互和数据交换的重要方式。API接口使得不同的系统能够互相调用对方的功能,提高了系统的灵活性和扩展性。但是,在进行API接口对接的过程中,需要注意一些流程和事项,以确保对接的顺利进行和系统的稳定运行。
|
3天前
|
缓存 监控 测试技术
ERP系统对接方案与API接口封装系列(高并发)
企业资源规划(ERP)系统是现代企业管理的核心,它集成了企业内部的各个部门和业务流程。为了实现ERP系统与其他外部系统或应用程序之间的数据交换和协作,需要对接方案。API(应用程序编程接口)是实现系统对接的常用方法之一。
|
3天前
对接声网rtc-restful-api
对接声网rtc-restful-api
24 0
|
1天前
|
监控 安全 数据挖掘
Email 接口API有哪些?具体分析一下阿里云和AOK的优点
本文介绍了常见的Email接口API,如阿里云邮件推送、AOKSend、SendGrid、Mailgun和Amazon SES。阿里云API以其高稳定性和数据分析功能脱颖而出,支持批量发送和多语言;而AOKSend API以易于集成、高安全性和优秀客户支持为亮点。企业在选择时应考虑自身需求和预算,以优化邮件营销效果。

热门文章

最新文章