오늘도열공
325
2019-10-15 19:24:25
4
323

@PathVariable 변수 타입만 다른 URI 구분 할 수 있나요?


예를들겠습니다.


@GetMapping("/{id}")

public Board boardInfo(@PathVariable Integer id) { ... }


@GetMapping("/{writer}")

public List<Board> boardListInfo(@PathVariable String writer) { ... }


파라미터 타입만 다른 위의 두 URI를 구분 할 수 있는 방법과 이런 방식으로 사용해도 되는지 궁금합니다.

0
  • 답변 4

  • kmksk
    1k
    2019-10-15 19:27:06 작성 2019-10-15 19:27:45 수정됨

    쓰지마세요 좋은 패턴이 아니에요


    참고로 정규식을 이용해서 가능은 합니다. 근데 쓰지마세요 

  • 오늘도열공
    325
    2019-10-15 19:28:48 작성 2019-10-15 19:32:49 수정됨

    @kmksk

    깔끔해 보여서 쓰려고 했는데 안좋은 이유 설명해주시면 정말 감사하겠습니다. 궁금해요 ㅜ.ㅜ

  • kmksk
    1k
    2019-10-15 19:41:19

    프로그램은 기본적으로 하나의 기능, 하나의 책임만 갖는것이 좋습니다. 하나의 endpoint 에서 2가지의 기능이 있다면 나중에 오해의 소지, 관리 문제가 생기며 비즈니스 복잡도가 올라갈수 있습니다.

    rest api 설계시 평균적으로 나오는 패턴들을 보면

    my.com/boards/1

    my.com/boards?writer=hong


    이런 패턴의 uri 로 보통 설계를 하고 조건 검색이나 추가 조건에 대한것은 파라미터로 넘기도록 만듭니다. 

    물론 이것이 정답은 아니지만 rest api 의 기본 목적자체는 주소를 통한 리소스 접근에 있기때문에 최대한 해당 리소스의 주소를 명확하게 정의하는것이 중요합니다.


    또한 writer 의 이름이 만약 숫자로만 되어있다면 의도하지 않은 문제가 생기겠죠? 즉 writer 의 이름을 숫자로만 쓰지 못하도록 하는 비즈니스 복잡도가 추가됩니다.


    머 이유야 여러가지 찾아보면 더 있겠지만 


    선택은 개발자의 몫이니까요.. 쓰고싶으면 써도 뭐.. 어쩌겠습니까..


  • 오늘도열공
    325
    2019-10-16 13:10:27

    @kmksk

    정성스런 답변 정말 감사드립니다. 말씀해주신 대로 오해의 소지가 없는 URI를 설계하도록 노력하겠습니다!

  • 로그인을 하시면 답변 을 등록할 수 있습니다.