[Network] HTTP API 설계 예시

hi·2022년 8월 26일
0

HTTP API 사용

중요한 것은 리소스와 리소스를 하는 행위를 분리하는 것
리소스는 복수형으로 작성

컬렉션 : POST 기반 등록

ex) 회원 관리 시스템 

회원 목록 /members		-> GET
회원 조회 /members/{id} -> GET
회원 등록 /members/{id} -> POST
회원 수정 /members/{id} -> PATCH, PUT, POST
회원 삭제 /members/{id} -> DELETE

PATCH : 부분 수정
PUT : 완전히 교체

PUT은 전체 데이터를 보내야 하기 때문에 수정의 경우 PATCH를 사용하는 것이 좋음. PUT도 용도에 맞게 사용하면 되지만(ex.게시물) 드물다.

💡 신규 자원 등록 특징

  • 서버가 새로 등록될 리소스 URI를 생성해준다
POST/members  ----> HTTP/1.1 201 Created
					Location: /members/100  // Location또는 body에 작성해줌

이러한 형식을 컬렉션이라 한다

  • 서버가 관리하는 리소스 디렉토리
  • 서버가 리소스의 URI를 생성, 관리
  • 여기서 컬렉션은 /members 이다


스토어 : PUT 기반 등록

ex) 파일 관리 시스템 

파일 폴더 /files			-> GET
파일 조회 /files/{filename} -> GET
파일 등록 /files/{filename} -> PUT
파일 삭제 /files/{filename} -> DELETE
파일 대량 등록 /files	-> POST 

파일의 경우 새로 덮어쓰는 것이 맞기에 PUT 사용
=> POST의 경우 의미를 임의로 지정

💡 신규 자원 등록 특징

  • 클라이언트가 직접 리소스의 URI 지정

    • 파일 등록 /files/{filename} -> PUT
    • PUT/files/star.jpg

이러한 형식을 스토어라고 한다

  • 클라이언트가 관리하는 리소스 저장소
  • 클라이언트가 리소스의 URI를 알고 관리
  • 여기서 스토어는 /files

👉 컬렉션 / 스토어 중 대부분 컬렉션을 사용



HTML FORM 사용

  • GET, POST만 지원
  • AJAX 같은 기술을 사용하여 해결 가능

ex) 순수 HTML, HTML FORM 의 경우로 가정

회원 목록 	 /members	-> GET
회원 등록 폼  /members/new  -> GET
회원 등록     /members/new, /members -> POST
회원 조회 	 /members/{id} -> GET
회원 수정 폼  /members/{id}/edit -> GET
회원 수정 	 /members/{id}/edit, /members/{id} -> POST
회원 삭제 	 /members/{id}/delete -> POST
  • 회원 등록의 경우 두 가지 중 하나를 선택할 수 있다
  • 폼 -> 등록 과정에서 서버의 문제로 다시 되돌아가야 할 때
    /members/new : 둘이 맞춰놓으면 경로가 바뀌지 않고 깔끔히 해결
    /members : URI 경로가 이동해버리면 refresh시 되돌아가지 못 함

컨트롤 URI (컨트롤러)

  • GET, POST만 지원하므로 제약 👉 동사로 된 리소스 경로 사용
  • POST의 /new, /edit, delete가 컨트롤 URI
  • HTTP 메서드로 해결하기 애매한 경우 사용 (HTTP API 포함-컬렉션 예시)


URI 설계 개념 참고

  • 문서 (document)

    • 단일 개념 (파일 하나, 객체 인스턴스, 데이터베이스 row)
      ex) /members/100, files/star.jpg
  • 컬렉션 (Collection)

    • 서버가 관리하는 리소스 디렉터리
    • 서버가 리소스 URI 생성, 관리
      ex) /members
  • 스토어 (Store)

    • 클라이언트가 관리하는 자원 저장소
    • 클라이언트가 리소스 URI 관리
      ex) /files
  • 컨트롤러, 컨트롤 URI (Controller)

    • 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
    • 동사 직접 사용


참고 https://restfulapi.net/resource-naming/

0개의 댓글