API URI 설계

Life is ninanino·2023년 4월 4일
0
post-thumbnail

리소스 식별

그동안 내 코드를 보면 아래와 같은 방식으로 매핑을 해주고 있었다

// 회원 등록
@PostMapping("/users")

// 회원 목록 조회
@GetMapping("/list")

// 회원 조회
@RequestMapping("/profile/{userId}")

// 회원 수정
@GetMapping("/users/{userId}/form")
@PutMapping("/users/{userId}")

과연 이것이 좋은 URI 설계였을까? 언뜻 보기에는 대강 의미는 드러나니까 괜찮다고 생각했었다.

리소스의 의미는 뭘까?

  • 회원을 등록,수정,조회하는게 리소스가 아니다
  • 예) 미네랄을 캐라 -> "미네랄"이 리소스이다
  • 즉, 회원이라는 users 개념 자체가 리소스이다

그럼 리소스는 어떻게 식별하는게 좋을까?

  • 회원을 등록하고, 수정하고, 조회하는 것을 모두 배제하고 회원이라는 리소스만 식별하면 된다 -> 회원 리소스를 URI에 매핑한다.
    무슨 소리냐?
  • 회원 목록 조회 /members
  • 회원 조회 /members/{id}
  • 회원 등록 /members/{id}
  • 회원 수정 /members/{id}
  • 회원 삭제 /members/{id}
    (참고로 계층 구조상 상위를 컬렉션으로 보고 복수형으로 사용하는 것을 권장한다 (member -> members)

그럼 이걸 어떻게 구분할 것인지 고민이 될 것이다.
URI는 리소스만 식별한다. 리소스와 해당 리소스를 대상으로 하는 행위를 분리한다.

  • 리소스 : 회원
  • 행위 : 조회, 등록, 삭제, 변경
  • 리소스는 명사, 행위는 동사로 이루어져 있다
    이걸 어떻게 나눌 것 인지는 HTTP 메서드로 구분하게 된다.
profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

1개의 댓글

comment-user-thumbnail
2023년 4월 4일

회원 조회 /members/{id}
회원 등록 /members/{id}
회원 수정 /members/{id}
회원 삭제 /members/{id}

요렇게 하는 것이 좋은 설계라는 것인가욤??

답글 달기