Aller au contenu principal
Version: 2.0.0

HTTP 触发器

阿里云的 HTTP 触发器和其他平台的有所区别,是独立于 API 网关的另一套服务于 HTTP 场景的触发器。相比于 API 网关,该触发器更易于使用和配置。

单接口配置

通过直接在代码中的 @ServerlessTrigger 装饰器绑定 HTTP 触发器。

import { Provide, Inject, ServerlessTrigger, ServerlessTriggerType } from '@midwayjs/decorator';
import { Context } from '@midwayjs/faas';

@Provide()
export class HelloAliyunService {
@Inject()
ctx: Context;

@ServerlessTrigger(ServerlessTriggerType.HTTP, {
path: '/',
method: 'get',
})
async handleHTTPEvent(@Query() name = 'midway') {
return `hello ${name}`;
}
}

本地测试

和应用类似相同,通过 createFunctionApp 创建函数 app,通过 createHttpRequest 方式进行测试。

import { Framework } from '@midwayjs/serverless-app';
import { createInitializeContext } from '@midwayjs/serverless-fc-trigger';
import { createFunctionApp, createHttpRequest } from '@midwayjs/mock';

describe('test/hello_aliyun.test.ts', () => {
let app: Application;
let instance: HelloAliyunService;

beforeAll(async () => {
// create app
app = await createFunctionApp<Framework>(join(__dirname, '../'), {
initContext: createInitializeContext(),
});
});

afterAll(async () => {
await close(app);
});

it('should get result from http trigger', async () => {
const result = await createHttpRequest(app).get('/').query({
name: 'zhangting',
});
expect(result.text).toEqual('hello zhangting');
});
});

部署

使用 npm run deploy  部署代码。

发布完成后,平台状态如下。

发布效果,每个配置的函数都将发布成一个平台上的函数,并且自动配置 http 触发器:

自定义域名

你需要提前申请一个域名,在国内的话,需要备案,否则无法绑定。

第一步,先将默认自动生成的域名的功能关闭

service:
name: midway-faas-examples

provider:
name: aliyun

custom:
customDomain: false

第二步,添加域名解析到你函数对应网关。

在函数页面绑定自定义域名,添加路由

绑定完成后,即可用域名访问。

一些限制

Request Headers 不支持以 x-fc-开头的自定义及以下字段的自定义:

  • accept-encoding
  • connection
  • keep-alive
  • proxy-authorization
  • te
  • trailer
  • transfer-encoding

Response Headers 不支持以 x-fc- 开头的自定义及以下字段的自定义:

  • connection
  • content-length
  • content-encoding
  • date
  • keep-alive
  • proxy-authenticate
  • server
  • trailer
  • transfer-encoding
  • upgrade

Request 限制项。如果超过以下限制,会返回 400 状态码和 InvalidArgument 错误码。

  • Headers 大小:Headers 中的所有 Key 和 Value 的总大小不得超过 4 KB。
  • Path 大小:包括所有的 Query Params,Path 的总大小不得超过 4 KB。
  • Body 大小:HTTP Body 的总大小不得超过 6 MB。

Response 限制项。如果超过以下限制,会返回 502 状态码和 BadResponse 错误码。

  • Headers 大小:Headers 中的所有 Key 和 Value 的总大小不得超过 4 KB。