请求API
在 快速开始 - 使用API 中其实已经介绍过如何对一个 API
发起请求。 此处会将在API模块、标准库模块中请求API的异同列举出来。
为了方便演示,下文中我们会使用一个虚构的 FooApi
类型作为示例。因为所有的 API
类型都具有共性, 有关这方面的内容可参考章节 API#通用特性
API模块
API模块是一种底层库模块,因此此模块中提供的API请求方式也会相对“原始”一些。
对API的请求有那么几种基本形式,它们在 Kotlin 中以扩展函数的形式提供, 而 Java 中则可以在 APIRequests
的静态函数中找到它们。
- request
最基础的请求方式,其他几种方式也是针对此方式的一种封装。 它的请求会直接返回最原始的结果
HttpResponse
,不会做任何额外判断, 比较适合需要自行处理 HTTP 原始响应结果的情况。val response = fooApi.request(client, token, token)HttpResponse response = APIRequests.requestBlocking(api, client, token);CompletableFuture<? extends HttpResponse> response = APIRequests.requestAsync(api, client, token);- requestResult
requestResult
会在request
的基础上对结果进行解析, 如果响应HTTP状态码并非异常,则会将其解析为ApiResult
类型后返回。这也是大别野API中的统一响应体结构。
val result = fooApi.requestResult(client, token, token)ApiResult<Foo> result = APIRequests.requestResultBlocking(api, client, token);CompletableFuture<ApiResult<Foo>> result = APIRequests.requestResultAsync(api, client, token);- requestData
requestData
会在requestResult
的基础上对结果进行校验, 如果 result 中的状态码代表为成功,则会将其中的真正响应数据拿出并返回。val result = fooApi.requestResult(client, token)Foo data = APIRequests.requestDataBlocking(api, client, token);CompletableFuture<Foo> data = APIRequests.requestDataAsync(api, client, token);
标准库模块
在标准库模块中,因为 Bot
类型已经包含了大多数所需信息, 因此不再需要像API模块那样提供大量基础性的参数了(比如 client、token), 取而代之的是一个 Bot
实例和API请求的目标别野ID。
对API的请求有那么几种基本形式,它们在 Kotlin 中以扩展函数的形式提供, 而 Java 中则可以在 BotRequests
的静态函数中找到它们。
- requestBy
最基础的请求方式,其他几种方式也是针对此方式的一种封装。 它的请求会直接返回最原始的结果
HttpResponse
,不会做任何额外判断, 比较适合需要自行处理 HTTP 原始响应结果的情况。val response = fooApi.requestBy(bot, villaId)HttpResponse response = APIRequests.requestByBlocking(api, bot, villaId);CompletableFuture<? extends HttpResponse> response = APIRequests.requestByAsync(api, bot, villaId);- requestResultBy
requestResultBy
会在requestBy
的基础上对结果进行解析, 如果响应HTTP状态码并非异常,则会将其解析为ApiResult
类型后返回。这也是大别野API中的统一响应体结构。
val result = fooApi.requestResultBy(bot, villaId)ApiResult<Foo> result = APIRequests.requestResultByBlocking(api, bot, villaId);CompletableFuture<ApiResult<Foo>> result = APIRequests.requestResultByAsync(api, bot, villaId);- requestDataBy
requestDataBy
会在requestResultBy
的基础上对结果进行校验, 如果 result 中的状态码代表为成功,则会将其中的真正响应数据拿出并返回。val result = fooApi.requestResultBy(bot, villaId)Foo data = APIRequests.requestDataByBlocking(api, bot, villaId);CompletableFuture<Foo> data = APIRequests.requestDataByAsync(api, bot, villaId);