TIL 34. URL와 URI, HTTP methods (for RESTful API)

문승준·2021년 10월 1일
0

Internet & Network

목록 보기
4/6
post-thumbnail

RESTful API를 공부하기 전에..
URI, URL의 개념에 대해 알아보고 HTTP method 들의 특징을 알아보자.

URI와 URL

URL (Uniform Resource Locator)

  • 네트워크 상에서 리소스의 위치(경로)를 나타낸다. -> 위치를 알려줌

  • 웹 사이트의 주소 뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타낼 수 있다.

URI (Uniform Resource Identifier)

  • 네트워크 상에서 리소스 자체를 나타내는 구분자(식별자) -> 콕 집어서 알려줌

  • URI는 URL과 URN을 고려해 설계된 상위 개념이다.

  • URI 안에 URL과 URN이 포함되어있는 개념이다.

표현방법

  • 2개의 예시 URI와 구성
                   hierarchical part
        ┌───────────────────┴────────────────────┐
                    authority          path
        ┌───────────────┴──────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value#fragid1
  └┬┘   └───────┬───────┘└────┬─────┘└─┬┘        └───┬────┘└───┬──┘
scheme  user information    host     port          query   fragment


  urn:example:mammal:monotreme:echidna
  └┬┘ └──────────────┬───────────────┘
scheme              path

HTTP methods

  • GET: URI 에 해당하는 정보의 전송요청을 보냄

  • POST: 서버가 처리할 수 있는 자료를 보냄

  • PUT: 자료를 전송하여 해당 URI 에 자료를 저장

  • DELETE: 해당 URI 의 자원/정보를 삭제

  • PATCH: 자원의 부분 교체

  • HEAD: URI 에 해당하는 정보의 전송을 요청. GET 과는 다르게 Meta 정보만을 요청

  • OPTIONS: 요청한 URI 에 어떤 메소드가 가능한지 질문

  • TRACE: 이전까지 요청한 정보들의 목록을 요청

  • CONNECT: 프록시가 사용하고, 연결을 요청

    wiki - 메소드별 비교 요약표

  • Restful API는 주로 데이터의 CRUD 를 위해 사용하며,
    Create(생성) 에는 POST 메소드를,
    Retrieve(읽기) 에는 GET 메소드를,
    Update(수정) 에는 PUT 메소드를,
    Delete(삭제) 에는 DELETE 메소드를 이용합니다.

PUT과 POST의 차이

  • idempotent를 한글로 직역하면 "멱등의"이다.

    f(x) = f(f(x)) 처럼 몇 번이고 같은 연산을 반복해도 같은 값이 나온다는 뜻이다.

    -> fault-tolerant API를 디자인 하는데 있어서 굉장히 중요한 요소라고 한다.

  • 예를 들어 클라이언트가 POST/dogs 를 요청했는데, 어떤 이유로간에 요청이 time-out (408) 되었다고 해 보자.
    클라이언트는 요청이 전달되었는데 네트워크가 끊어졌는지, 아니면 요청조차 전달이 되지 않았는지 알 수 없다.

-> 이 때, 클라이언트가 원하는 operation 이 idempotent 하다면 다시 요청해도 상관없다. 항상 같은 결과를 만드니까. 그러나 POST 는 idempotent 하지 않다.

POST

  • /dogs에 POST 요청을 보내면 매번 다른 곳에 리소스가 생성된다.
POST /dogs HTTP/1.1

{ "name": "blue", "age": 5 }

HTTP/1.1 201 Created

# dogs/1, dogs/2, dogs/3 ... DB에 계속 추가될 수 있다.

PUT

  • /dogs/3에 PUT 요청을 보내면 리소스 지정이 명확해서 매번 같은 결과를 보장한다. → idempotent하다.

  • 리소스의 위치를 지정해서 생성 혹은 업데이트(replace) 할 수 있다.

  • PUT은 리소스의 모든 프로퍼티를 업데이트한다.

PUT /dogs/3 HTTP/1.1

{ "name": "blue", "age": 5 }

# dogs/3, dogs/3, dogs/3 ...

PATCH

  • 리소스의 위치를 알고 있을 때, 리소스의 일부분을 업데이트(updates part) 한다.

Safe Methods

  • 리소스를 수정하지 않는 idempotent한 메소드를 safe하다고 말할 수 있다

  • 하지만, DELETE리소스를 변경하므로 예외이다.

  • GET, PUT : idempotent

  • HEAD : body없이 Header의 meta 정보만 얻는다.

  • OPTIONS : 해당 리소스에 가능한 operation이 무엇인지 얻는다.

    ( 참고: 리소스의 정보를 가져오는 것은 아니라서 캐싱이 안된다고한다.)

TRACE, CONNECT

  • TRACE 는 클라이언트가 방금 보낸 요청을 다시 달라고 서버에 요청하는 것

  • CONNECT 는 HTTP 터널링을 할 때 쓰인다. 중간의 프록시 서버를 위해서 쓴다.


참조목록

URL - 위키백과, 우리 모두의 백과사전

HTTP 요청/응답 및 HTTP 요청 method feat. Restful API

REST API: Put vs Post

profile
개발자가 될 팔자

0개의 댓글