ApiDefinition

interface ApiDefinition<out R : Any>(source)

一个针对 HTTP API 的基本形式的同于约束定义。

ApiDefinition 是一种针对某个 HTTP API 的定义, 使其对外提供一个API所需的基本信息。

ApiDefinition 中的信息主要基于 kotlinx.serializationKtor, 但其仅描述信息,不提供功能,因此对其的请求并不一定限于 Ktor

不可变

ApiDefinition 的实现理应是 不可变 的。ApiDefinition 最终可能产生的请求应当在填入参数构造它的时候就可以确定, 且不可中途变更。 ApiDefinition 内部也许会存在一些懒加载的属性。

构建方式

推荐在实现 ApiDefinition 的时候,隐藏其构造方法而使用工厂方法或构建器取而代之,例如:

class FooApi private contractor(private val name: String) : ApiDefinition<Foo> {
companion object Factory {
// 提供工厂
fun create(name: String): FooApi = FooApi(name)
}

// ...
}

响应类型

预期响应结果类型 R 不应为 null,如果可能响应空内容,则使用 object 类型代替, 例如 Unit。需要注意的是部分反序列化器可能无法自动将 null 解析为 object, 因此在实现对 ApiDefinition 的请求于解析时可能需要额外的处理。

Author

ForteScarlet

Parameters

R

预期的响应结果

Inheritors

Properties

Link copied to clipboard
abstract val body: Any?

此 API 请求时需要携带的 body。在 methodHttpMethod.PostHttpMethod.Put 的时候可能有值。 可能会是 Ktor 的特殊类型,例如 OutgoingContent

Link copied to clipboard
open val headers: Headers

api 请求时需要携带的 headers。 默认为 Headers.Empty

Link copied to clipboard
abstract val method: HttpMethod

此 API 的请求方式。

Link copied to clipboard

API 响应结果的反序列化器。

Link copied to clipboard
abstract val url: Url

api的请求目标地址。