接口开发
路由
在 Midway Hooks 中,你可以通过 @midwayjs/hooks
提供的 Api()
函数来快速创建接口。
Hello World 示例:
/src/hello.ts
import {
Api,
Get,
} from '@midwayjs/hooks';
export default Api(
Get(), // Http Path: /api/hello,
async () => {
return 'Hello World!';
}
);
一个 API 接口由以下部分组成:
Api()
:定义接口函数Get(path?: string)
:指定 Http 触发器,指定请求方法为 GET,可选参数path
为接口路径,不指定路径的情况下会根据函数名 + 文件名
生成路径,默认带有/api
前缀Handler: async (...args: any[]) => { ... }
:用户逻辑,处理请求并返回结果
你也可以指定路径,例子如下。
/src/hello.ts
import {
Api,
Get,
} from '@midwayjs/hooks';
export default Api(
Get('/hello'), // Http Path: /hello,
async () => {
return 'Hello World!';
}
);
请求上下文(Context / Request / Response)
你可以通过 @midwayjs/hooks
提供的 useContext
来获取请求上下文对象。
以使用 Koa 框架为例,那么 useContext
将返回 Koa 的 Context 对象。
基础示例:
- 获取请求 Method 和 Path
import {
Api,
Get,
useContext,
} from '@midwayjs/hooks';
import { Context } from '@midwayjs/koa';
export default Api(Get(), async () => {
const ctx = useContext<Context>();
return {
method: ctx.method,
path: ctx.path,
};
});
- 设置返回的 Header
import {
Api,
Get,
useContext,
} from '@midwayjs/hooks';
export default Api(Get(), async () => {
const ctx = useContext<Context>();
ctx.set('X-Powered-By', 'Midway');
return 'Hello World!';
});
同时我们也可以通过 SetHeader()
来设置 Header。
Http 触发器
触发器 | 注释 |
---|---|
All(path?: string) | 接受所有 Http Method 的请求 |
Get(path?: string) | 接受 GET 请求 |
Post(path?: string) | 接受 POST 请求 |
Put(path?: string) | 接受 PUT 请求 |
Delete(path?: string) | 接受 DELETE 请求 |
Patch(path?: string) | 接受 PATCH 请求 |
Head(path?: string) | 接受 HEAD 请求 |
Options(path?: string) | 接受 OPTIONS 请求 |
请求 Request
传递参数 Data
在 Midway Hooks 中,接口的入参就是声明函数的参数。
基础示例如下:
import {
Api,
Post,
} from '@midwayjs/hooks';
export default Api(
Post(), // Http Path: /api/say,
async (name: string) => {
return `Hello ${name}!`;
}
);
你可以用两种方式来调用接口。
- 全栈项目:基于零 Api,导入接口并调用
- 手动调用:使用 fetch 在 Http 下,
Handler(...args: any[])
的入参,可以在手动请求时通过设置 Http Body 的 args 参数来传递参数。
- 全栈应用(零 Api)
- 手动调用
import say from './api';
const response = await say('Midway');
console.log(response); // Hello Midway!