Skip to content
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

[Feature Request] 提供更加简单化请求方法的修饰器 #18

Open
Cyberhan123 opened this issue Dec 6, 2021 · 11 comments
Open

Comments

@Cyberhan123
Copy link

现在的HTTPMethod 虽然足够满足业务需求,但是不够简练,是否能提供 常用的 Get,Post等方法的修饰器

@Controller('/')
export class HomeController {
  @Get('/')
  async home() {
    return 'Hello tegg!';
  }
}

顺带补充,能否提供修改全局route的前缀 ,类似于在配置文件提供

export default config={
  tegg:{
    root:"/hello"
  }
}
@killagu
Copy link
Contributor

killagu commented Dec 6, 2021

@Cyberhan123 可以先提个 RFC 说说自己想要的注解是什么样的。

@Cyberhan123
Copy link
Author

@cyber​​han123可以先提个RFC告诉自己想要的注解的。

我会在稍后整理出一个PR

@Cyberhan123
Copy link
Author

@killagu 如果你认为这个 #19 可行我会补充测试用例和相关文档

@killagu
Copy link
Contributor

killagu commented Dec 13, 2021

@Cyberhan123 参数是不是可以更简单,比如只有 @Get() 这样?其他所有参数都是可选的

@Cyberhan123
Copy link
Author

Cyberhan123 commented Dec 14, 2021

@Cyberhan123 参数是不是可以更简单,比如只有 @Get() 这样?其他所有参数都是可选的

是可以的,我修改了一下。麻烦帮忙review一下看看是不是合理

@killagu
Copy link
Contributor

killagu commented Dec 14, 2021

如果默认值都是 / 的话,这个默认值就没什么意义了。使用的地方都需要设置 path

@Cyberhan123
Copy link
Author

Cyberhan123 commented Dec 14, 2021

如果默认值都是 / 的话,这个默认值就没什么意义了。使用的地方都需要设置 path

请教一下,如果按照nest的实现我测试时候是如果请求 http://localhost:3000/只能命中第一个hander?

@Controller()
class A{
    @Get()
    function GetA(){
    
    }
    @Get()
    function GetB(){
    
    }
}

而你的想法是否是:如果没有可选参数,可以通过函数名来匹配;
即在上面的情况下,如果是GetA那么可以通过http://localhost:3000/GetA来进行请求;
如果是的话,是否要指定,当成员函数名为Index,或者Home的时候将其匹配到/
如果要是存在@Get('/') 那么这个函数的优先级相比Home或者Index应该要高?

@killagu
Copy link
Contributor

killagu commented Dec 15, 2021

HTTP 接口会有不同的风格,比如说 RPC 类型、REST 类型。

可以分两套 api 出来,比如说。

RPC:

import { Controller, POST } from '@eggjs/tegg/http/rpc'

@Controller('/api/v1')
class Hello {
  // POST /api/v1/helloWorld
  @POST()
  helloWorld() 
}

REST:

import { Controller, Create, List, Get } from '@eggjs/tegg/http/rest'

@Controller('/api/v1/fruits')
class Fruit {
  // POST /api/v1/helloWorld
  @Create()
  create() {}

  @List()
  list() {}

  @Get()
  get(id) {}
}

@Cyberhan123
Copy link
Author

个人感觉如果通过包后缀区分不会很清晰,我们是不是应该直接通过Controller区分?就比如普通的Controller,Rest风格的RestController,支持RPC协议的 RPCController,那Rest风格的httpMethod注解应该有哪些估计还需要调研,RPC这里感觉也还有不少问题

@killagu
Copy link
Contributor

killagu commented Dec 16, 2021

是的。我们需要一个更完善的 rfc 详细的描述下不同风格的 controller 注解。

@killagu
Copy link
Contributor

killagu commented Dec 16, 2021

namespace + controller 可以配合再一起使用。比如说 import { RestController } from '@eggjs/tegg/rest'。通过 namespace 来区分的原因是,每个风格下的注解可能很多,会导致 @eggjs/tegg 这个 namespace 下太多了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants