Modifier

包路径: github.com/caicloud/nirvana/service

在 Nirvana 中,每一个 API 都有一个对应的 Definition。在我们实际开发过程中,经常会要求 API 和 业务函数有一致的行为表现。比如每个业务函数的第一个参数都是 Context。在这种场景下,如果每个 Definition 都需要去描述这个参数,那么 Definition 会显得非常冗余。因此 Nirvana 提供了 Definition Modifer 机制,允许在 Definition 生效之前,对 Definition 进行修改。

这样就能通过 Modifier 完成 Definition 公共部分的构建,而每个 Definition 实际上要填写的部分就是只与自身业务相关的信息。Modifier 如下:

type DefinitionModifier func(d *definition.Definition)

Nirvana 提供的 Modifiers

在使用 nirvana init 创建的项目中,可以在 pkg/apis/modifiers 下查看启用的 Modifiers。

默认启用的 Modifiers 包括:FirstContextParameter,ConsumeAllIfConsumesIsEmpty,ProduceAllIfProducesIsEmpty,ConsumeNoneForHTTPGet,ConsumeNoneForHTTPDelete,ProduceNoneForHTTPDelete。

FirstContextParameter

这个 Modifier 为所有 Definition 的第一个参数添加上名为 context 的 Prefab。启用之后,所有业务函数的第一个参数必须是 context.Context

ConsumeAllIfConsumesIsEmpty

这个 Modifier 为所有 Consumes 为空的 Definition 加上 */*

ProduceAllIfProducesIsEmpty

这个 Modifier 为所有 Produces 为空的 Definition 加上 */*

ConsumeNoneForHTTPGet

这个 Modifier 为所有 HTTP GET 类型的 Definition 加上空的 Consumer,即允许请求体为空。

ProduceNoneForHTTPDelete

这个 Modifier 为所有 HTTP Delete 类型的 Definition 加上空的 Producer,即允许响应体为空。

LastErrorResult

这个 Modifier 为所有的 Definition 的最后一个返回值加上 definition.Error

results matching ""

    No results matching ""