博客系统接口交互实现


placeholder image
admin 发布于:2022-07-24 20:03:06
阅读:loading

如果有关注到本站的建站设计就能知晓本站区分前端web项目和后端admin项目,前端与后端的数据交互有多种设计实现,接口交互的实现常见的有JDK的HttpUrlConnection、Apache的HttpClient、OkHttp、Spring RestTemplate、Ribbon、Fegin等多种实现,另有基于跨域直接访问的Proxy Servlet、Nginx的方式,也是终究考虑本站作为较小型站点和运维成本的考虑,最终选择了使用Gitee上的开源项目Forest组件,作者公子骏,非常优秀的开发者(架构师),我辈学习之楷模,Gitee项目地址为“https://gitee.com/dromara/forest”,项目介绍的官方网站为“http://forest.dtflyx.com/”,如果是小型项目或者是个人项目整合应用还是不错的选择,当然了仅供参考,本次将所涉及到的Forest Api相关的配置及参考代码整理分析,详细如下文所示:

Maven坐标

本站建站初期于两年前了,当时的最新版本是1.5.0,由于已经集成了多个组件故此处经过分析后排除了一大堆多余的组件(由于版本号不通需要排除掉),最新版本为v1.5.25(2022年7月),参考配置如下:

<!--开源的 Java HTTP 客户端框架-->
<dependency>
    <groupId>com.dtflys.forest</groupId>
    <artifactId>spring-boot-starter-forest</artifactId>
    <version>1.5.0-RC5</version>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </exclusion>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </exclusion>
    </exclusions>
</dependency>

application.yml

#http客户端组件forest
forest:
  bean-id: forestConfiguration # 在spring上下文中bean的id, 默认值为forestConfiguration
  backend: httpclient # 后端HTTP API: okhttp3
  max-connections: 50 # 连接池最大连接数,默认值为500
  max-route-connections: 50 # 每个路由的最大连接数,默认值为500
  timeout: 30000 # 请求超时时间,单位为毫秒, 默认值为3000
  connect-timeout: 20000 # 连接超时时间,单位为毫秒, 默认值为2000
  retry-count: 0 # 请求失败后重试次数,默认为0次不重试
  #ssl-protocol: TLSv1.2 # 若后端启用https后支持的协议
  ssl-protocol: SSLv3 # 单向验证的HTTPS的默认SSL协议,默认为SSLv3
  log-enabled: true # 打开或关闭日志,默认为true
  log-request: true
  log-response-content: true
  log-response-status: true
  variables:
    serverAdminPath: http://127.0.0.1:8080/

Java调用示例

package cn.chendd.blog.web.home.client;

import ...;

/**
 * 第三方登录client
 *
 * @author chendd
 * @date 2021/2/9 21:42
 */
@BaseRequest(baseURL = "${serverAdminPath}" , contentEncoding = CharsetNames.UTF_8 , contentType = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public interface UserLoginClient {

    /**
     * 获取第三方登录的地址
     * @param key 第三方登录应用标识
     * @param friend 朋友站点
     * @return 登录地址
     */
    @Get(url = "/v1/third-login/${key}.html?friend=${friend}")
    BaseResult<String> getLoginUrl(@DataVariable("key") String key, @DataVariable("friend") String friend);

    /**
     * 存储第三方登录用户信息
     * @param userResult 用户信息对象
     * @return 系统内用户对象结构
     */
    @Put(url = "/v1/system/user/third.html" , dataType = "json", contentType = MediaType.APPLICATION_JSON_VALUE , logEnabled = true)
    BaseResult<SysUserResult> thirdUserStore(@Body ThirdUserResult userResult);

}

知识点

(1)@BaseRequest定义了根路径、编码类型、响应类型;

(2)@DataVariable定义请求参数名称,用于URL参数传值;

(3)@Body类似Spring MVC中的@RequestBody注解;

(4)BaseResult为返回类型,默认为auto自动适配结果集类型,支持多级JSON泛型的响应;

小总结

如果有兴趣,有合适的应用场景可在官网多看看,提供的Api比较全面和比较强大,个人感觉要是能够兼容Spring MVC里面的注解就更好点,毕竟学习的成本稍微小点。

 点赞


 发表评论

当前回复:作者

 评论列表


留言区