独立 Web 应用程序

函数可以自动导出为 HTTP 端点。spring-doc.cadn.net.cn

spring-cloud-function-web模块具有自动配置 当它包含在 Spring Boot Web 应用程序中时激活(使用 MVC 支持)。还有一个spring-cloud-starter-function-web自 收集所有可选的依赖项,以防您只想要一个简单的 入门体验。spring-doc.cadn.net.cn

激活 Web 配置后,应用将具有 MVC endpoint(默认情况下在“/”上,但可以使用spring.cloud.function.web.path) 可用于访问 函数,其中函数名称成为 URL 路径的一部分。支持的内容类型包括 纯文本和 JSON。spring-doc.cadn.net.cn

重要的是要了解,虽然 SCF 提供了将功能 Bean 导出为 REST 端点的能力,但它不能替代 Spring MVC/WebFlux 等。 它主要是为了适应无状态无服务器模式,您只想通过 HTTP 公开一些无状态功能。
方法 路径 请求 响应 地位

获取spring-doc.cadn.net.cn

/{提供商}spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

来自指定提供商的物料spring-doc.cadn.net.cn

200 个好spring-doc.cadn.net.cn

发布spring-doc.cadn.net.cn

/{消费者}spring-doc.cadn.net.cn

JSON 对象或文本spring-doc.cadn.net.cn

镜像输入并将请求正文推送到使用者spring-doc.cadn.net.cn

202 录用spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

/{消费者}spring-doc.cadn.net.cn

JSON 对象或文本spring-doc.cadn.net.cn

镜像输入并将请求正文推送到使用者spring-doc.cadn.net.cn

202 录用spring-doc.cadn.net.cn

删除spring-doc.cadn.net.cn

/{消费者}spring-doc.cadn.net.cn

JSON 对象或文本spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

204 暂无内容spring-doc.cadn.net.cn

发布spring-doc.cadn.net.cn

/{函数}spring-doc.cadn.net.cn

JSON 对象或文本spring-doc.cadn.net.cn

应用命名函数的结果spring-doc.cadn.net.cn

200 个好spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

/{函数}spring-doc.cadn.net.cn

JSON 对象或文本spring-doc.cadn.net.cn

应用命名函数的结果spring-doc.cadn.net.cn

200 个好spring-doc.cadn.net.cn

获取spring-doc.cadn.net.cn

/{函数}/{项}spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

将项目转换为对象并返回应用函数的结果spring-doc.cadn.net.cn

200 个好spring-doc.cadn.net.cn

如上表所示,端点的行为取决于方法以及传入请求数据的类型。当传入数据是单值的,并且目标函数被声明为明显的单值(即不返回集合或Flux),则响应也将包含单个值。 对于多值响应,客户端可以通过发送Accept: text/event-stream.spring-doc.cadn.net.cn

使用 input 和 output 声明的函数和使用者Message<?>将请求头视为消息头,输出消息头将转换为 HTTP 头。 消息的有效负载将是一个body或空字符串(如果没有body或者它是空的。spring-doc.cadn.net.cn

在 POST 文本时,响应格式可能与 Spring Boot 2.0 及更早版本不同,具体取决于内容协商(提供内容类型并接受标头以获得最佳结果)。spring-doc.cadn.net.cn

请参阅 [测试功能应用程序] 以查看有关如何测试此类应用程序的详细信息和示例。spring-doc.cadn.net.cn

HTTP 请求参数

正如您在上表中注意到的,您可以将参数作为路径变量传递给函数(即/{function}/{item}). 例如localhost:8080/uppercase/foo将导致调用uppercase函数,其输入参数为foo.spring-doc.cadn.net.cn

虽然这是推荐的方法,也适合大多数用例案例,但有时您必须处理 HTTP 请求参数(例如localhost:8080/uppercase/foo?name=Bill). 框架将把 HTTP 请求参数与 HTTP 标头类似,方法是将它们存储在Messageheaders 在标题键下http_request_param其值为Map请求参数,因此为了访问它们,您的函数输入签名应该接受Message类型(例如Function<Message<String>, String>).为方便起见,我们提供HeaderUtils.HTTP_REQUEST_PARAM不断。spring-doc.cadn.net.cn

函数映射规则

如果目录中只有一个函数(使用者等),则路径中的名称是可选的。 换句话说,如果您只有uppercase目录中的函数curl -H "Content-Type: text/plain" localhost:8080/uppercase -d hellocurl -H "Content-Type: text/plain" localhost:8080/ -d hello调用是相同的。spring-doc.cadn.net.cn

可以使用管道或逗号来分隔函数名称来寻址复合函数(管道在 URL 路径中是合法的,但在命令行上键入有点尴尬)。 例如curl -H "Content-Type: text/plain" localhost:8080/uppercase,reverse -d hello.spring-doc.cadn.net.cn

对于目录中有多个函数的情况,每个函数都将被导出和映射,函数名称为 路径的一部分(例如localhost:8080/uppercase). 在此方案中,您仍然可以通过提供spring.cloud.function.definition属性spring-doc.cadn.net.cn

--spring.cloud.function.definition=foo|bar

上面的属性将组合 'foo' 和 'bar' 函数,并将组合的函数映射到 “/” 路径。spring-doc.cadn.net.cn

相同的属性也适用于无法通过 URL 解析函数的情况。例如,您的网址可能是localhost:8080/uppercase,但没有uppercase功能。 但是,有功能foobar.所以,在这种情况下localhost:8080/uppercase将解析为foo|bar. 这尤其适用于使用 URL 来传达某些信息的情况,因为会调用 Message 标头uri与值 实际 URL,使用户能够使用它进行评估和计算。spring-doc.cadn.net.cn

函数过滤规则

在目录中有多个函数的情况下,可能只需要导出某些函数或函数组合。在这种情况下,您可以使用 一样spring.cloud.function.definition要导出的属性列表函数,以 分隔。 请注意,在这种情况下,不会将任何内容映射到根路径,并且不会导出未列出的函数(包括组合)。;spring-doc.cadn.net.cn

--spring.cloud.function.definition=foo;bar

这只会导出函数foo和功能bar无论目录中有多少个函数可用(例如localhost:8080/foo).spring-doc.cadn.net.cn

--spring.cloud.function.definition=foo|bar;baz

这只会导出函数组合foo|bar和功能baz无论目录中有多少个函数可用(例如localhost:8080/foo,bar).spring-doc.cadn.net.cn

Http 标头传播

默认情况下,大多数请求HttpHeaders被复制到响应中HttpHeaders.如果您需要过滤掉某些标头,您可以使用spring.cloud.function.http.ignored-headers用逗号分隔。例如spring.cloud.function.http.ignored-headers=foo,bar.spring-doc.cadn.net.cn

CRUD REST 与 Spring Cloud 函数

到目前为止,应该很清楚函数被导出为 REST 端点,并且可以使用各种 HTTP 方法调用。换句话说,单个 可以通过 GET、POST、PUT 等触发函数。spring-doc.cadn.net.cn

然而,它并不总是可取的,当然也不符合 CRUD 的概念。虽然 SCF 不支持也无意支持 Spring Web 堆栈的所有功能,该框架确实提供了对 CRUD 映射的支持,其中单个函数可以映射到特定的 HTTP 方法。 它是通过spring.cloud.function.http.<method-name>属性完成的。spring-doc.cadn.net.cn

spring.cloud.function.http.GET=uppercase;reverse;foo|bar
spring.cloud.function.http.POST=reverse
spring.cloud.function.http.DELETE=deleteById

如您所见,在这里,我们使用与spring.cloud.function.definition属性,其中“;”允许我们定义多个函数,“|”表示函数组合。spring-doc.cadn.net.cn