-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] 增强Controller能力与相关HttpMethod #22
Comments
cc @killagu ,我把咱们讨论的问题进行了一下小结,在整理的时候发现了一点问题,我查了一下阮一峰的RESTful描述,如果要是严格按照这个描述的话,RestController的HttpMethod是否是一个就够了?我们是否要在这一个Handler里处理全部HttpMethod? |
RestController 只有一个 http method 是不够的,每个动词都代表了不同的行为。不能混在一个 method 里的。 |
@Controller('/api/v1')
class Fruit {
// GET /api/v1/hello
@Get()
Hello() {}
}
@Controller('/api/v1')
class Fruit {
// GET /api/v1/
@Get()
Index() {}
}
|
嗯,Hello的大小写我修改一下,第二个问题说的也有道理,确实是这样 |
这个能不能具体说一下,因为我平时使用RESTful比较少 |
rest 是以资源为维度来访问的,比如 POST 是创建一个资源, GET / 获取列表, GET /:id 是获取一个字端,PUT, DELETE 都有其含义。 |
如果是这样的话好像不需要RestController了吧,只需要把 path传入对应的HttpMethod就可以了 |
意义还是有的,也是简化。 @RestController()
class Resource {
@List()
listFoo(): Promise<Array<Foo>> {}
@Get()
getFoo(id: string): Promise<Foo> {}
} |
我去学习了一下相关内容,补充了一下RFC内容,麻烦帮忙康康有没有啥问题@killagu |
按照 rest 风格,这个作为 新增的 |
@Cyberhan123 可以先来写一版 http 的。RFC 看起来不错 |
好的~~,这个RFC也会不断完善的 |
最近比较忙,不过我会继续的,不会咕咕 |
没有进展了吗 |
背景
参照: 提供更加简单化请求方法的修饰器的讨论
思路
所有Controller 类型会通过namespace进行区分
为了方便区分
Controller
,RestController
,HttpController
,RpcControlle
需要单独划分命名空间以方便归类。 将HttpController和简化后的Controller将会被划分到http namespace, RestController 会被划分到rest namespace,
RpcControlle
会被划分到 rpc namespace。以下将通过
import
的形式具体描述:新增baseRoot
config新增baseRoot能力
通过这个字段可以全局调整路由根路径
此时路径会被修正到‘/tegg/api/v1'’
新增Controller
所有的方法入参暂定为继承自HttpController:
新增Controller下Http Method修饰器
新的
Http Method
会跟HTTPMethodEnum
的枚举保持一致,包含GET
,POST
,PUT
,DELETE
,PATCH
,OPTIONS
,HEAD
所有的方法入参暂时定为继承自HTTPMethod,以GET为例:
与HTTPMethod不同的是Get第一个入参为可选,如果Get的
path
入参为空时, 可以通过检索Handler Function 名称自动匹配路径。 下面以GET为例:以下方代码为例子,如果要处理当前Controller的跟路径,请使用Get('/')
新增RestController修饰
RESTful的独有特性
与常规HttpController不同,RestController将自动携带 Hypermedia,
API,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
比如访问 https://api.github.com/ 即可获得所有api 访问api.github.com/user,然后就得到了下面结果。
具体能力
配置baseRoot对RestController的会产生影响,通过这个字段可以全局调整RESTful根路径。
此时会将rest默认的
/api
前缀覆盖为/tegg
此时会将rest默认的
/api
前缀覆盖为/
@RestController继承自HttpController,但是与Controller不同,如果path为缺省会根据当前的class name 并以复数的形式自动补全,会在当前根目录自动生成Hypermedia API。
以下方代码为例子,我们没有填写任何参数并且没有配置
baseRoot
字段,那么就会指向/api/v1/fruits
下面我们假设进行请求
基于Get 请求增加,额外的业务能力
@Query
支持取出单条数据@List
支持取出所有数据,默认遵从RESTful风格支持常见参数过滤(可能需要配合ORM的能力)1.支持 ?limit=10:指定返回记录的数量
2.支持 ?offset=10:指定返回记录的开始位置。
3.支持 ?page=2&per_page=100:指定第几页,以及每页的记录数。 4.根据函数的入参可以进行横向扩展,比如需要支持搜索
剩余业务能力支持待补充
新增RpcController修饰
待调查: 主要调查方向GRPC, JSONRPC
其他资料与难点调研
英文单词复数化
hypermedia 实现调研
The text was updated successfully, but these errors were encountered: