该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 spring-cloud-function 5.0.0spring-doc.cadn.net.cn

独立的网页应用

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

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

激活网页配置后,你的应用将有一个端点(默认设置为“/”,但可配置为spring.cloud.function.web.path)可用于访问应用上下文中的函数,函数名称成为 URL 路径的一部分。支持的内容类型有纯文本和 JSON。spring-doc.cadn.net.cn

需要理解的是,虽然SCF支持导出FunctionBeans作为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 OKspring-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 OKspring-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 OKspring-doc.cadn.net.cn

获取spring-doc.cadn.net.cn

/{function}/{item}spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

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

200 OKspring-doc.cadn.net.cn

如上表所示,端点的行为取决于方法以及输入请求数据的类型。当输入数据为单值,且目标函数被声明为明显单值(即未返回集合或通量),则响应也包含单个值。对于多值响应,客户端可以通过发送接受:文本/事件流.spring-doc.cadn.net.cn

留言<?>将请求头视为消息头,输出消息头将转换为HTTP头。消息的有效载荷将是身体或空字符串,若不存在身体或者它是无效的。spring-doc.cadn.net.cn

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

参见[测试功能应用],了解如何测试此类应用的详细内容和示例。spring-doc.cadn.net.cn

HTTP 请求参数

正如你从前表中注意到的,你可以将参数作为路径变量传递给函数(即,/{function}/{item}). 例如localhost:8080/大写/foo将导致呼唤大写函数,其输入参数为.spring-doc.cadn.net.cn

虽然这是推荐的方法,也适用于大多数用例,但有时你必须处理HTTP请求参数(例如,localhost:8080/uppercase/foo?name=Bill). 该框架将通过存储在消息头部键下的首部http_request_param其值为地图请求参数,因此为了访问它们,你的函数输入签名必须接受消息类型(例如,Function<Message<String>, String>).为了方便,我们提供以下服务HeaderUtils.HTTP_REQUEST_PARAM不断。spring-doc.cadn.net.cn

函数映射规则

如果目录中只有一个函数(消费者等),路径中的名称是可选的。 换句话说,前提是你只有大写目录功能curl -H “内容类型:文本/普通” localhost:8080/大写 -d hellocurl -H “内容类型:文本/普通” localhost:8080/ -d hello呼叫完全相同。spring-doc.cadn.net.cn

复合函数可以通过管道或逗号来分隔函数名称(管道在 URL 路径中是合法的,但在命令行输入时会有些不便)。 例如curl -H “内容类型:文本/普通” localhost:8080/大写,反向 -d hello.spring-doc.cadn.net.cn

对于目录中存在多个函数的情况,每个函数都会被导出并映射,函数名称为 路径的一部分(例如,localhost:8080/大写). 在这种情况下,你仍然可以通过提供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/大写,但没有大写功能。 然而,存在函数酒吧.所以,在这种情况下localhost:8080/大写将解决为foo|bar. 这在使用 URL 传递特定信息时尤其有用,因为会调用 Message 头乌里其中值为 该URL的实际使用,使用户能够利用它进行评估和计算。spring-doc.cadn.net.cn

函数过滤规则

在目录中有多个函数的情况下,可能需要只导出某些函数或函数组合。那你可以使用 一样spring.cloud.function.definition你打算导出的物业列表函数,以 为界隔。 注意,在这种情况下,根路径不会映射到任何内容,未列出的函数(包括组合)也不会被导出。;spring-doc.cadn.net.cn

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

这只会导出函数以及功能酒吧无论目录中有多少功能(例如,localhost:8080/foo).spring-doc.cadn.net.cn

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

这只会导出函数组合foo|bar以及功能巴兹无论目录中有多少功能(例如,本地主持人:8080/foo,bar(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 with Spring Cloud 函数

现在应该很清楚,函数是导出为 REST 端点,并且可以通过各种 HTTP 方法调用。换句话说,一首单曲 功能可以通过 GET、POST、PUT 等触发。spring-doc.cadn.net.cn

然而,这并非总是理想的,也绝不符合CRUD的概念。虽然SCF不支持,也无意支持 Spring Web Stack 的所有功能,该框架支持可映射 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

如你所见,这里我们用相同的规则将函数映射到各种 HTTP 方法上spring.cloud.function.definition其中“;”允许定义多个函数,“|”表示函数复合。spring-doc.cadn.net.cn