优秀的编程知识分享平台

网站首页 > 技术文章 正文

关于对外服务api请求的优雅调用方法

nanyue 2025-07-28 19:27:25 技术文章 1 ℃

我们常规的都是通过工具类的方式来调用的,这部分代码写起来,比较分散,那么有没有一种方法可以归集在一起呢?

这里我们通过feign的方式进行调用

zhijian.im.netease.api为我们调用三方sdk的地址

zhijian:
  im:
    netease:
      appKey: 
      appSecret: 
      ttl: 86400
      api: https://api.netease.im
package com.zhijian.mp.im.remote;

import com.alibaba.fastjson.JSON;
import com.zhijian.mp.im.dto.remote.request.*;
import com.zhijian.mp.im.dto.remote.response.*;
import com.zhijian.mp.im.remote.ratelimit.RateLimited;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

@FeignClient(name = "netease-api-client", url = "${zhijian.im.netease.api}", path = "/nimserver")
public interface NeteaseApiClient {

    @PostMapping(path = "/user/create.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseCreateUserRsp createUser(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseCreateUserReq req);

    /**
     * 将updateUser接口转一下,将NeteaseUpdateUserReq转成map
     * @param headers
     * @param neteaseUpdateUserReq
     * @return
     */
    default NeteaseUpdateUserRsp updateUser(Map<String, Object> headers,NeteaseUpdateUserReq neteaseUpdateUserReq){
        return updateUser(headers, JSON.parseObject(JSON.toJSONString(neteaseUpdateUserReq),Map.class));
    }

    @PostMapping(path = "/user/updateUinfo.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseUpdateUserRsp updateUser(@RequestHeader Map<String, Object> headers,@RequestParam Map<String,String> params);

    @PostMapping(path = "/user/block.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseBaseRsp blockUser(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseBlockUserReq blockUserReq);

    @PostMapping(path = "/user/unblock.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseBaseRsp unblockUser(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseUnblockUserReq unblockUserReq);

    @PostMapping(path = "/msg/sendBatchMsg.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseSendBatchMsgRsp sendBatchMsg(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseSendBatchMsgReq req);

    @PostMapping(path = "/msg/sendBatchAttachMsg.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseSendBatchMsgRsp sendBatchAttachMsg(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseSendBatchAttachMsgReq req);

    /**
     * 创建新群
     *
     * @param headers 请求头数据
     * @param req 请求参数
     * @return NeteaseTeamCreateRsp
     */
    @PostMapping(path = "/team/create.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseTeamCreateRsp createTeam(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseTeamCreateReq req);

    /**
     * 邀请人加群
     *
     * @param headers 请求头数据
     * @param req 请求参数
     * @return NeteaseTeamCreateRsp
     */
    @PostMapping(path = "/team/add.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseAddTeamRsp addTeam(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseAddTeamReq req);

    /**
     * 获取用户已加入的群组信息
     * @param headers 请求头数据
     * @param req 请求参数
     * @return NeteaseTeamsRsp
     */
    @PostMapping(path = "/team/joinTeams.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseTeamsRsp alreadyJoinTeams(@RequestHeader Map<String, Object> headers,@RequestBody NeteaseTeamsReq req);

    /**
     * 踢人出群
     * @param headers 请求头数据
     * @param req 请求参数
     * @return NeteaseKickTeamsRsp
     */
    @PostMapping(path = "/team/kick.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseKickTeamsRsp kickTeams(@RequestHeader Map<String, Object> headers,@RequestBody NeteaseKickTeamsReq req);


    /**
     * 解散群
     * @param headers
     * @param req
     * @return
     */
    @PostMapping(path = "/team/remove.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseBaseRsp removeTeam(@RequestHeader Map<String, Object> headers,@RequestBody NeteaseRemoveTeamReq req);

    /**
     * 发送消息
     * @param headers
     * @param req
     * @return
     */
    @PostMapping(path = "/msg/sendMsg.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseSendBatchMsgRsp sendMsg(@RequestHeader Map<String, Object> headers,@RequestBody NeteaseSendMsgReq req);

    /**
     * 删除漫游消息
     * @param headers
     * @param req
     * @return
     */
    @PostMapping(path = "/msg/delRoamSession.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseBaseRsp delRoamSession(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseDeleteSessionReq req);

    /**
     * 删除消息
     *
     * @param headers 请求header
     * @param req     删除信息请求参数
     * @return 删除结果
     */
    @RateLimited(key = "netease:delMsg", expire = 1)
    @PostMapping(path = "/msg/delMsg.action", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    NeteaseBaseRsp delMsg(@RequestHeader Map<String, Object> headers, @RequestBody NeteaseDeleteMsgReq req);


}

通过这种方式,我们可以把同业务类型的放在一个类中

最近发表
标签列表