对接声网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);
    }
}

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

相关文章
|
6月前
|
监控 安全 API
什么是API?进行API对接的5大常见误区!
API是软件间通信的桥梁,API对接则实现系统间数据互通。广泛应用于内外部系统集成,提升效率、降低成本、增强竞争力。本文详解其概念、场景、方法及常见误区。
什么是API?进行API对接的5大常见误区!
|
6月前
|
人工智能 API 开发工具
京东:对接白条API提供分期付款,降低消费门槛
本文详解京东白条API集成,涵盖技术原理、分步对接流程及Python代码实现,帮助开发者快速接入分期付款功能。通过API调用实现信用评估与分期计算,降低消费门槛,提升电商转化率。内容基于官方文档,确保准确可靠。
376 8
|
6月前
|
JSON 监控 API
Shopee:对接海外仓API实现本地发货,优化物流时效
Shopee卖家可通过对接海外仓API实现本地发货,将物流时效从10-15天缩短至3-5天,显著提升买家体验与店铺转化率。本文详解API对接原理、步骤及代码示例,助力优化跨境物流效率。
280 1
|
6月前
|
JSON 监控 API
小红书:对接苹果支付API满足iOS用户习惯,提升转化率
小红书集成Apple Pay可显著提升iOS用户支付体验,简化流程、增强安全、提高转化率。本文详解从开发配置、代码实现到后端验证与优化策略的全流程,助力高效落地,推动业务增长。(238字)
515 0
|
6月前
|
存储 监控 API
京东电子面单API对接指南:实现订单自动打单,发货效率提升300%
电子面单通过API自动化实现降本增效,显著提升订单处理效率。对接需准备app_key、access_token等参数,结合京东API实现快速打单。系统设计支持自动打印与异常告警,实测日均处理量提升316%,错单率大幅下降,人力成本节省超65%。
511 0
|
6月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
6月前
|
JSON 安全 测试技术
医药电商:对接处方审核API实现线上购药合规化
医药电商需合规销售处方药。本文详解对接处方审核API,实现自动化真实性验证、用药合理性审查与全程留痕,满足监管要求。提升审核效率至3秒内,错误率低于0.5%,降低人力成本40%。构建审核闭环,保障安全与体验双赢。(238字)
662 0
|
6月前
|
数据采集 监控 API
亚马逊:对接竞品监控API实时跟踪价格变动,调整定价策略
在电商竞争中,亚马逊通过对接竞品监控API,实现价格实时采集与分析,动态调整定价策略。本文详解其技术实现、商业价值及挑战,展现数据驱动下的智能定价如何提升竞争力与利润。
620 0
|
6月前
|
监控 搜索推荐 数据挖掘
小红书:对接话题挑战API激发UGC创作,打造爆款内容
小红书话题挑战API助力品牌高效激发UGC,通过自动化创建活动、精准推送与数据分析,降低运营门槛,提升爆款率。结合吸引力主题、激励机制与裂变传播,实现内容生态繁荣,推动品牌增长。
337 0
|
6月前
|
JSON 监控 API
京东:对接秒杀活动API策划限时抢购,制造稀缺感
京东秒杀活动通过API实现限时抢购,制造稀缺感,提升用户转化率。本文详解API对接流程、稀缺策略及代码示例,助力商家高效运营,实现销量增长。
261 0