当前位置: 首页 > news >正文

网络HTTP

HTTP Network Request Library

A Retrofit-based HTTP network request encapsulation library that provides simple and easy-to-use API interfaces with complete network request functionality.
基于Retrofit的HTTP网络请求封装库,提供简单易用的API接口和完整的网络请求功能。

Features

功能特点

  • Built on Retrofit2 and OkHttp
  • 基于Retrofit2和OkHttp构建
  • Support for common HTTP request methods (GET, POST, PUT, DELETE, etc.)
  • 支持常见的HTTP请求方法(GET、POST、PUT、DELETE等)
  • Unified request and response handling
  • 统一的请求和响应处理
  • Flexible request configuration
  • 灵活的请求配置
  • Custom request headers
  • 自定义请求头
  • Log interception and printing
  • 日志拦截和打印
  • Thread-safe singleton implementation
  • 线程安全的单例实现

Integration

集成方式

Gradle

dependencies {implementation 'io.github.vance0901:http:1.0.0'
}

加入网络权限 Add network permissions

    <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Usage

使用方法

1. Initialization

1. 初始化

Initialize in the Application class:
在Application类中初始化:

HttpConfig config = new HttpConfig.Builder().baseUrl("https://api.example.com/").connectTimeout(10000).readTimeout(10000).writeTimeout(10000).debug(BuildConfig.DEBUG).logLevel(BuildConfig.DEBUG ? HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE).build();HttpManager.init(config);

2. Define API Interfaces

2. 定义API接口

public interface ApiService {// GET request example// GET请求示例@GET("users/{id}")Call<BaseResponse<UserInfo>> getUserInfo(@Path("id") long id);// GET request with query parameters// 带查询参数的GET请求@GET("users")Call<BaseResponse<List<UserInfo>>> getUserList(@Query("page") int page, @Query("size") int size);// POST request example - form submission// POST请求示例 - 表单提交@FormUrlEncoded@POST("users/login")Call<BaseResponse<LoginResponse>> login(@Field("username") String username,@Field("password") String password);// POST request example - JSON submission// POST请求示例 - JSON提交@POST("users/create")Call<BaseResponse<UserInfo>> createUser(@Body UserInfo userInfo);// PUT request example// PUT请求示例@PUT("users/{id}")Call<BaseResponse<UserInfo>> updateUser(@Path("id") long id, @Body UserInfo userInfo);// DELETE request example// DELETE请求示例@DELETE("users/{id}")Call<BaseResponse<Void>> deleteUser(@Path("id") long id);// DELETE request with body// 带请求体的DELETE请求@HTTP(method = "DELETE", path = "users", hasBody = true)Call<BaseResponse<Void>> batchDeleteUsers(@Body List<Long> userIds);
}

3. Create API Service Class

3. 创建API服务类

public class UserService extends BaseApiService<ApiService> {private static volatile UserService instance;private UserService() {super();}public static UserService getInstance() {if (instance == null) {synchronized (UserService.class) {if (instance == null) {instance = new UserService();}}}return instance;}@Overrideprotected Class<ApiService> getApiServiceClass() {return ApiService.class;}// GET request example// GET请求示例public void getUserInfo(long userId, RequestCallback<UserInfo> callback) {executeRequest(apiService.getUserInfo(userId), callback);}// GET request with parameters example// 带参数的GET请求示例public void getUserList(int page, int size, RequestCallback<List<UserInfo>> callback) {executeRequest(apiService.getUserList(page, size), callback);}// POST request example// POST请求示例public void login(String username, String password, RequestCallback<LoginResponse> callback) {executeRequest(apiService.login(username, password), callback);}// POST request with JSON example// 带JSON的POST请求示例public void createUser(UserInfo userInfo, RequestCallback<UserInfo> callback) {executeRequest(apiService.createUser(userInfo), callback);}// PUT request example// PUT请求示例public void updateUser(long userId, UserInfo userInfo, RequestCallback<UserInfo> callback) {executeRequest(apiService.updateUser(userId, userInfo), callback);}// DELETE request example// DELETE请求示例public void deleteUser(long userId, RequestCallback<Void> callback) {executeRequest(apiService.deleteUser(userId), callback);}// DELETE request with body example// 带请求体的DELETE请求示例public void batchDeleteUsers(List<Long> userIds, RequestCallback<Void> callback) {executeRequest(apiService.batchDeleteUsers(userIds), callback);}
}

4. Make Network Requests

4. 发起网络请求

4.1 POST Request Example
4.1 POST请求示例
UserService.getInstance().login("username", "password", new RequestCallback<LoginResponse>() {@Overridepublic void onStart() {// Show loading state// 显示加载状态}@Overridepublic void onSuccess(LoginResponse data) {// Handle successful response// 处理成功响应}@Overridepublic void onError(int code, String message) {// Handle error response// 处理错误响应}@Overridepublic void onComplete() {// Request completed// 请求完成}
});
4.2 GET Request Example
4.2 GET请求示例
UserService.getInstance().getUserInfo(123, new RequestCallback<UserInfo>() {@Overridepublic void onStart() {// Show loading state// 显示加载状态}@Overridepublic void onSuccess(UserInfo data) {// Handle user information// 处理用户信息String username = data.getUsername();String email = data.getEmail();}@Overridepublic void onError(int code, String message) {// Handle errors, e.g., user not found// 处理错误,例如用户未找到}@Overridepublic void onComplete() {// Request completed// 请求完成}
});
4.3 PUT Request Example
4.3 PUT请求示例
// Create user information to update
// 创建要更新的用户信息
UserInfo userInfo = new UserInfo();
userInfo.setUsername("newUsername");
userInfo.setEmail("new.email@example.com");UserService.getInstance().updateUser(123, userInfo, new RequestCallback<UserInfo>() {@Overridepublic void onStart() {// Show updating state// 显示更新状态}@Overridepublic void onSuccess(UserInfo data) {// Handle updated user information// 处理更新后的用户信息}@Overridepublic void onError(int code, String message) {// Handle update failure// 处理更新失败}@Overridepublic void onComplete() {// Update request completed// 更新请求完成}
});
4.4 DELETE Request Example
4.4 DELETE请求示例
UserService.getInstance().deleteUser(123, new RequestCallback<Void>() {@Overridepublic void onStart() {// Show deleting state// 显示删除状态}@Overridepublic void onSuccess(Void data) {// Handle successful deletion// 处理成功删除}@Overridepublic void onError(int code, String message) {// Handle deletion failure// 处理删除失败}@Overridepublic void onComplete() {// Deletion request completed// 删除请求完成}
});

5. Managing Request Headers

5. 管理请求头

5.1 Setting Global Authentication Token
5.1 设置全局认证令牌
// Set a global authentication token that will be used for all requests
// 设置一个全局认证令牌,用于所有请求
HttpManager.getInstance().setGlobalToken("your-auth-token-here");
5.2 Adding Custom Headers
5.2 添加自定义请求头
// Add a single custom header
// 添加单个自定义请求头
HttpManager.getInstance().addGlobalHeader("Custom-Header", "Header-Value");// Add multiple headers at once
// 一次添加多个请求头
Map<String, String> headers = new HashMap<>();
headers.put("X-API-Key", "api-key-value");
headers.put("Accept-Language", "en-US");
HttpManager.getInstance().addGlobalHeaders(headers);
5.3 Removing Headers
5.3 移除请求头
// Remove a specific header
// 移除特定请求头
HttpManager.getInstance().removeGlobalHeader("Custom-Header");// Clear all global headers
// 清除所有全局请求头
HttpManager.getInstance().clearGlobalHeaders();
5.4 Example: Managing Authentication Token After Login
5.4 示例:登录后管理认证令牌
UserService.getInstance().login("username", "password", new RequestCallback<LoginResponse>() {@Overridepublic void onStart() {// Show loading state// 显示加载状态}@Overridepublic void onSuccess(LoginResponse data) {// After successful login, set the authentication token// 登录成功后,设置认证令牌if (data != null && data.getToken() != null) {HttpManager.getInstance().setGlobalToken(data.getToken());}// Handle other login response data// 处理其他登录响应数据}@Overridepublic void onError(int code, String message) {// Handle login failure// 处理登录失败}@Overridepublic void onComplete() {// Login request completed// 登录请求完成}
});

Design Patterns

设计模式

This library uses multiple design patterns:
此库使用多种设计模式:

  • Singleton Pattern: HttpManager
  • 单例模式HttpManager
  • Builder Pattern: HttpConfig.Builder
  • 构建者模式HttpConfig.Builder
  • Factory Pattern: HttpManager.createApi()
  • 工厂模式HttpManager.createApi()
  • Observer Pattern: RequestCallback
  • 观察者模式RequestCallback
  • Template Method Pattern: BaseApiService
  • 模板方法模式BaseApiService
  • Strategy Pattern: Different request strategies through different API interfaces
  • 策略模式:通过不同的API接口实现不同的请求策略
  • Proxy Pattern: HeaderInterceptor
  • 代理模式HeaderInterceptor

Project Structure

项目结构

com.vance0901.zhuhai.network.http
├── HttpManager.java               // HTTP Manager
│                                  // HTTP管理器
│                                  
├── callback                       // Callback interfaces
│                                  // 回调接口
│   └── RequestCallback.java       // Request callback interface
│                                  // 请求回调接口
├── config                         // Configuration classes
│                                  // 配置类
│   └── HttpConfig.java            // HTTP configuration class
│                                  // HTTP配置类
├── interceptor                    // Interceptors
│                                  // 拦截器
│   └── HeaderInterceptor.java     // Request header interceptor
│                                  // 请求头拦截器
├── model                          // Data models
│                                  // 数据模型
│   └── BaseResponse.java          // Base response class
│                                  // 基础响应类
└── service                        // Service classes// 服务类└── BaseApiService.java        // Base API service class// 基础API服务类
JAVA开发者或其他开发人员使用请参考:
https://central.sonatype.com/artifact/io.github.vance0901/http/overview
For JAVA developers or other developers to use, please refer to:
https://central.sonatype.com/artifact/io.github.vance0901/http/overview
更多详细用法请查看demo。 For more detailed usage, please refer to the demo.

代码链接:

https://github.com/vance0901/ZhuHaiHttp

相关文章:

网络HTTP

HTTP Network Request Library A Retrofit-based HTTP network request encapsulation library that provides simple and easy-to-use API interfaces with complete network request functionality. 基于Retrofit的HTTP网络请求封装库&#xff0c;提供简单易用的API接口和完…...

(七)企业级高性能 WEB 服务 - HTTPS 加密

在当今互联网时代&#xff0c;数据安全成为了每个企业和开发者必须关注的重点。尤其是对于Web服务来说&#xff0c;如何保障用户数据的安全传输是至关重要的。本文将深入探讨HTTPS加密的原理、Nginx的HTTPS配置&#xff0c;以及如何通过Nginx实现高性能的Web服务。 1. HTTPS加密…...

[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)

标题&#xff1a;[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2) 水墨不写bug 文章目录 一、无法拷贝类(class uncopyable)的设计解释&#xff1a;重要思想&#xff1a;使用示例 二、锁的RAII设计解释重要考虑使用示例 三、基于RAII模式和互斥锁的的日志…...

MySQL(单表)知识点

文章目录 1.数据库的概念2.下载并配置MySQL2.1初始化MySQL的数据2.2注册MYSQL服务2.3启动MYSQL服务2.4修改账户默认密码2.5登录MYSQL2.6卸载MYSQL 3.MYSQL数据模型3.1连接数据库 4.SQL简介4.1SQL的通用语法4.2SQL语句的分类4.3DDL语句4.3.1数据库4.3.2表(创建,查询,修改,删除)4…...

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中&#xff0c;动画是提升用户体验的关键要素。通过巧妙运用动画&#xff0c;我们能让应用界面更加生动、交互更加流畅&#xff0c;从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…...

使用Node.js从零搭建DeepSeek本地部署(Express框架、Ollama)

目录 1.安装Node.js和npm2.初始化项目3.安装Ollama4.下载DeepSeek模型5.创建Node.js服务器6.运行服务器7.Web UI对话-Chrome插件-Page Assist 1.安装Node.js和npm 首先确保我们机器上已经安装了Node.js和npm。如果未安装&#xff0c;可以通过以下链接下载并安装适合我们操作系…...

Docker 部署 MongoDB 并持久化数据

Docker 部署 MongoDB 并持久化数据 在现代开发中&#xff0c;MongoDB 作为 NoSQL 数据库广泛应用&#xff0c;而 Docker 则提供了高效的容器化方案。本教程将介绍如何使用 Docker 快速部署 MongoDB&#xff0c;并实现数据持久化&#xff0c;确保数据不会因容器重启或删除而丢失…...

DeepSeek + 沉浸式翻译 打造智能翻译助手

本文详细介绍如何使用 DeepSeek API 沉浸式翻译插件打造个性化翻译助手。 一、DeepSeek API 配置 基础配置 API 基础地址&#xff1a;https://api.deepseek.com需要申请 API Key支持与 OpenAI SDK 兼容的调用方式 可用模型 deepseek-chat&#xff1a;已升级为 DeepSeek-V3&am…...

cdn取消接口缓存

添加cdn后&#xff0c;使用cdn加速域名访问接口 是缓存&#xff0c;不是最新的数据&#xff0c;如果使用局域网则是最新的数据&#xff0c;如果修改配置&#xff0c;确保使用cdn域名请求的接口返回不是缓存 要确保通过CDN加速域名访问接口时返回的是最新的数据&#xff0c;而不…...

字节跳动C++客户端开发实习生内推-抖音基础技术

智能手机爱好者和使用者&#xff0c;追求良好的用户体验&#xff1b; 具有良好的编程习惯&#xff0c;代码结构清晰&#xff0c;命名规范&#xff1b; 熟练掌握数据结构与算法、计算机网络、操作系统、编译原理等课程&#xff1b; 熟练掌握C/C/OC/Swift一种或多种语言&#xff…...

OpenHarmony子系统开发编译构建指导

OpenHarmony子系统开发编译构建指导 概述 OpenHarmony编译子系统是以GN和Ninja构建为基座&#xff0c;对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统&#xff0c;该系统提供以下基本功能&#xff1a; 以部件为最小粒度拼装产品和独…...

MySQL进阶-关联查询优化

采用左外连接 下面开始 EXPLAIN 分析 EXPLAIN SELECT SQL_NO_CACHE * FROM type LEFT JOIN book ON type.card book.card; 结论&#xff1a;type 有All ,代表着全表扫描&#xff0c;效率较差 添加索引优化 ALTER TABLE book ADD INDEX Y ( card); #【被驱动表】&#xff0…...

数据结构第六节:二叉搜索树(BST)的基本操作与实现

【本节要点】 二叉搜索树&#xff08;BST&#xff09;基本原理代码实现核心操作实现辅助函数测试代码完整代码 一、二叉搜索树&#xff08;BST&#xff09;基本原理与设计总结 注&#xff1a;基本原理的详细分析可以在数据结构第六节中查看&#xff0c;这里是简单描述。 二叉搜…...

在昇腾GPU上部署DeepSeek大模型与OpenWebUI:从零到生产的完整指南

引言 随着国产AI芯片的快速发展&#xff0c;昇腾&#xff08;Ascend&#xff09;系列GPU凭借其高性能和兼容性&#xff0c;逐渐成为大模型部署的重要选择。本文将以昇腾300i为例&#xff0c;手把手教你如何部署DeepSeek大模型&#xff0c;并搭配OpenWebUI构建交互式界面。无论…...

在window终端创建docker容器的问题

问题&#xff1a; 错误原因&#xff1a; PowerShell 换行符错误 PowerShell 中换行应使用反引号而非反斜杠 \&#xff0c;错误的换行符导致命令解析中断。 在 Windows 的 PowerShell 中运行 Docker 命令时遇到「sudo 无法识别」的问题&#xff0c;这是因为 Windows 系统原生不…...

掌握Kubernetes Network Policy,构建安全的容器网络

在 Kubernetes 集群中&#xff0c;默认情况下&#xff0c;所有 Pod 之间都是可以相互通信的&#xff0c;这在某些场景下可能会带来安全隐患。为了实现更精细的网络访问控制&#xff0c;Kubernetes 提供了 Network Policy 机制。Network Policy 允许我们定义一组规则&#xff0c…...

ReAct论文阅读笔记总结

ReAct&#xff1a;Synergizing Reasoning and Acting in Language Models 背景 最近的研究结果暗示了在自主系统中结合语言推理与交互决策的可能性。 一方面&#xff0c;经过适当Prompt的大型语言模型&#xff08;LLMs&#xff09;已经展示了在算术、常识和符号推理任务中通…...

Linux云计算SRE-第十七周

1. 做三个节点的redis集群。 1、编辑redis节点node0(10.0.0.100)、node1(10.0.0.110)、node2(10.0.0.120)的安装脚本 [rootnode0 ~]# vim install_redis.sh#!/bin/bash # 指定脚本解释器为bashREDIS_VERSIONredis-7.2.7 # 定义Redis的版本号PASSWORD123456 # 设置Redis的访问…...

Python在数字货币交易中的算法设计:从策略到实践

Python在数字货币交易中的算法设计:从策略到实践 随着区块链技术的发展和加密货币市场的繁荣,数字货币交易已经成为金融领域的一个重要分支。从个体投资者到量化基金,算法交易(Algorithmic Trading)正在为提高交易效率和决策质量提供强大的支撑。在这些技术应用中,Pytho…...

高纬度、跨极区导航技术

本文是何昆鹏老师所写&#xff0c;在此非常感谢何老师的分享。 全球导航&#xff0c;特别是极区导航&#xff0c;一直被美俄导航领域所关注。美俄本身部分国土就处于极区&#xff0c;很多战略军事部署与全球航线也都处于该区域&#xff0c;加之其战略军事任务也都强调全球覆盖…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...