阿里云的 HTTP 触发器和其他平台的有所区别,是独立于 API 网关的另一套服务于 HTTP 场景的触发器。相比于 API 网关,该触发器更易于使用和配置。
单接口配置
在 f.yml
中配置函数,同时配置触发器类型。
service:
name: midway-faas-examples
provider:
name: aliyun
functions:
httpGetTrigger:
handler: index.get
events:
- http:
method: get ## 配置请求方法
path: /api ## 配置请求路径
对应代码如下。
import { Func, Inject, Provide } from '@midwayjs/decorator';
import { FaaSContext } from '@midwayjs/faas';
@Provide()
export class APIService {
@Inject()
ctx: FaaSContext; // context
@Func('index.get')
async get() {
return this.ctx.method;
}
}
发布完成后,平台状态如下。
也可以配置多个 method,如果不写,默认为 all
service:
name: midway-faas-examples
provider:
name: aliyun
functions:
httpGetTrigger:
handler: index.get
events:
- http:
method:
- get
- post ## 配置多种请求方法
path: /api ## 配置请求路径
httpDefaultTrigger:
handler: index.post
events:
- http:
path: /* ## 不写 method ,默认为 all
多接口配置
如果需要配置多个不同接口,可以增加不同的函数,比如以下的示例表示配置了 5 个单独 method 的函数以及 1 个支持全 method 的函数:
service:
name: midway-faas-examples
provider:
name: aliyun
functions:
httpGetTrigger:
handler: index.get
events:
- http:
method: get
path: /
httpPostTrigger:
handler: index.post
events:
- http:
method: post
path: /
httpPutTrigger:
handler: index.put
events:
- http:
method: put
path: /
httpDeleteTrigger:
handler: index.del
events:
- http:
method: delete
path: /
httpHeadTrigger:
handler: index.head
events:
- http:
method: head
path: /
httpAllTrigger:
handler: index.all
events:
- http:
method: any ## 表示支持所有 method
path: /api
:::info method 为空时,默认为 any,即为 ‘GET’, ‘PUT’, ‘POST’, ‘DELETE’, ‘HEAD’ 所有类型。 :::
在 midway faas 的体系中,我们可以将多个函数写到同一个类中,代码如下,每个使用 @Func
修饰的方法都可以作为一个单一函数来访问:
import { Func, Inject, Provide } from '@midwayjs/decorator';
import { FaaSContext } from '@midwayjs/faas';
@Provide()
export class APIService {
@Inject()
ctx: FaaSContext;
@Func('index.get')
async get() {
return this.ctx.method;
}
@Func('index.post')
async post() {
return this.ctx.method;
}
@Func('index.put')
async put() {
return this.ctx.method;
}
@Func('index.del')
async del() {
return this.ctx.method;
}
@Func('index.head')
async head() {
return this.ctx.method;
}
@Func('index.all')
async all() {
return this.ctx.method;
}
}
发布效果,每个配置的函数都将发布成一个平台上的函数,并且自动配置 http 触发器:
HTTP Context API
Midway faas 在 http 场景下,将代码写法进行了简化,并向传统 koa 写法保持尽可能一致。
@Provide()
export class APIService {
@Inject()
ctx: FaaSContext;
@Func('index.get')
async get() {
const query = this.ctx.query;
const url = this.ctx.path;
const method = this.ctx.method;
// 等价于 this.ctx.body = 'hello world'; 两者都支持
return 'hello world';
}
@Func('index.post')
async post() {
const body = this.ctx.request.body;
return this.ctx.method; // POST
}
}
:::info 直接 return 的内容,会被自动挂载到 ctx.body 中。 :::
详细文档,请访问函数上下文。
自定义域名
你需要提前申请一个域名,在国内的话,需要备案,否则无法绑定。
添加域名解析到你函数对应网关。
在函数页面绑定自定义域名,添加路由
绑定完成后,即可用域名访问。