ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [HTTP] 회원정보 관리 API를 만들어라!
    카테고리 없음 2021. 5. 14. 18:54

    위 글은 Inflearn 김영한님의 HTTP강의를 바탕으로 쓰여졌습니다

    자세한 기술 설명 및 참고는 강의를 참고해주세요.

     

     


     

    회원 정보 관리 API를 만들어라!

     

    •  회원 목록 조회 /read-member-list
    •  회원 조회  /read-member-by-id
    •  회원 등록 /create-member
    •  회원 수정 /update-member
    •  회원 삭제 /delete-member

     

     

    API URI 고민

    URI( Uniform Resource Identifier)

     

    리소스의 의미는 뭘까?

     

    • 회원을 등록하고 수정하고 조회하는게 리소스가 아니다!
    • 예) 미네랄을 캐라 -> 미네랄이 리소스
    • 회원이라는 개념 자체가 바로 리소스다.

     

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

    • 회원을 등록하고 수정하고 조회하는 것을 모두 배제
    • 회원이라는 리소스만 식별하면 된다. -> 회원 리소스를 URI에 매핑

     

    리소스와 행위를 분리

    가장 중요한 것은 리소스를 식별하는 것

     

    • URI는 리소스만 식별!
    • 리소스와 해당 리소스를 대상으로 하는 행위를 분리
    • 리소스: 회원
    • 행위: 조회,등록,삭제,변경
    • 리소스는 명사, 행위는 동사(미네랄을 캐라)
    • 행위(메서드)는 어떻게 구분?

     

    HTTP 메서드 종류

     

    주요 메서드

    • HEAD: GET과 동일하지만 메세지 부분을 제외하고, 상태 줄과 헤더만 반환
    • OPTIONS: 대상 리소스에 대한 통신 기능 옵션(메서드)를 설명(주로 CORS에서 사용)
    • CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
    • TRACE : 대상 리소스에 대한 경로를 따라 메세지 루프백 테스트를 수행

     

    GET 

    리소스 조회

    서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달

    메세지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음

     

     

    POST 

    • 요청 데이터 처리
    • 메세지 바디를 통해 서버로 요청 데이터로 전달
    • 서버는 요청 데이터를 처리
      • 메세지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
    • 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용

     

    POST

    정리

     

    1. 새 리소스 생성(등록)

    서버가 아직 식별하지 않은 새 리소스 생성

    2. 요청 데이터 처리

    단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리 해야 하는 경우

     

    예) 주문에서 결제완료 -> 배달시작 -> 배달완료 처럼 단순히 값 변경을 넘어 프로세스의

    상태가 변경되는 경우 POST의 결과로 새로운 리소스가 생성되지 않을 수도 있음

    예) POST / orders/ {orderld}/start-delivery(컨트롤 URI)

     

    3. 다른 메서드로 처리하기 애매한 경우

    예) JSON 으로 조회 데이터를 넘겨야 하는데, GET 메서드를 사용하기 어려운 경우

        - 애매하면 POST

     

    POST는 모든것을 할 수 있지만

    조회 할때에는 GET을 대부분 사용한다!

     

     

    PUT

    리소스를 대체

    • 리소스가 있으면 대체
    • 리소스가 없으면 생성
    • 쉽게 이야기해서 덮어버림

     

    중요! 클라이언트가 리소스를

    식별클라이언트가 리소스 위치를 알고

    URI 지정POST와 차이점

     

    멱등

    Idempotent

     

    • f(f(x)) = f(x)
    • 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
    • 멱등 메서드
    • GET : 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
    • PUT : 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다.
    • DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.
    • POST: 멱등이 아니다. 두 번 호출하면 같은 결제가 중복해서 발생 할 수 있다.

    멱등이 왜 필요한가?

    => 자동 복구 메커니즘

    서버가 TIMEOUT 등으로 정상 응답을 못주었을 때, 클라이언트가 같은 요청을 다시 해도 되는가? 판단 근거

     

    멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지는 않는다.\

     

     

    캐시가능

    Casheable

    • 응답 결과 리소스를 캐시해서 사용해도 되는가?
    • GET, HEAD, POST , PATCH 캐시 가능
    • 실제로는 GET, HEAD 정도만 캐시로 사용

     

     

     

     

    클라이언트에서 서버로 데이터 전송

    데이터 전달 방식은 크게 2가지

     

    • 쿼리 파라미터를 통한 데이터 전송
      • GET
      • 주로 정렬 필터(검색어)
    • 메시지 바디를 통한 데이터 전송
      • POST, PUT , PATCH
      • 회원가입, 상품 주문, 리소스 변경

    댓글

Designed by Tistory.