具有多个端点(Azure)的Azure功能

时间:2018-12-17 02:31:02

标签: java azure binding azure-functions

我在这里可以看到Azure函数的Java示例:

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    @FunctionName("HttpTrigger-Java")
    public HttpResponseMessage<String> httpHandler(
            @HttpTrigger(name = "req", methods = {"get", "post"}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context
    ) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponse(400, "Please pass a name on the query string or in the request body");
        } else {
            return request.createResponse(200, "Hello, " + name);
        }
    }
}

该示例仅公开了一个端点, 我知道可以使用Azure Functions创建多个端点,例如:/ name(执行某种方法)和一个不同的端点/ id(执行一种不同的方法)。

我该如何实现?

什么是最佳实践,我了解我应该使用Azure函数的bind批注,如何使用它?

1 个答案:

答案 0 :(得分:1)

使用console.log()的{​​{1}}属性,并将其值绑定到方法签名中的route参数。然后我们可以根据传入的路由确定响应。

HttpTrigger

此外,默认情况下route的功能url为这种格式。要删除@FunctionName("HttpTrigger-Java") public HttpResponseMessage run( @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, route="{customRoute}", authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request, @BindingName("customRoute")String route, final ExecutionContext context) { context.getLogger().info("Java HTTP trigger processed a request."); if(route.equals("home")){ return request.createResponseBuilder(HttpStatus.OK).body("Home route request").build(); } else if(route.equals("id")){ return request.createResponseBuilder(HttpStatus.OK).body("Id route request").build(); } else{ return request.createResponseBuilder(HttpStatus.NOT_FOUND).body("Not a valid route").build(); } } 前缀,请将host/api/{customRoute}中的api设置为空。

routePrefix