2019년 11월 28일 목요일

REST API의 개념

REST의 정의

"REpresentational State Transfer"로서 자원(resource)을 이름(표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
자원(resource)의 표현(representation)은
자원(resource) : 해당 소프트웨어가 관리하는 모든 것(문서, 그림, 데이터 등등)
표현(representation) : 자원을 표현하기 위한 이름(회원 정보가 자원이라면 'member'를 자원의 표현으로 정하는 것)
상태(정보) 전달은 데이터가 요청되는 시점에 자원의 상태(정보)를 전달한다.
Json 혹은 XML로 데이터를 주고 받는다.

REST API는??

API(Application Programming Interface) : 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램 간 상호작용을 촉진하며, 서로 정보를 교환 가능하도록 하는 것을 말한다.
그래서 REST API는 REST 기반으로 서비스 API를 구현한 것이다.

REST API 설계 규칙

  1. 슬래시 구분자( / ) 는 계층 관계를 나타내는데 사용한다.
    예: http://sample.com/home/login
  2. URI 마지막 문자로 슬래시( / )를 포함하지 않는다.
    예: httpL//sample.com/home/login/ ( X )
  3. 하이픈( - ) 은 URI 가독성을 높이는데 사용한다.
  4. 밑줄( _ ) 은 URI에 사용하지 않는다.
  5. URI 경로에는 소문자
  6. 파일확장자는 URI에 포함하지 않는다.

그러면 RESTful API는 뭐지???

REST가 위에서 설명한 것과 같다면 RESTful은 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
'REST API'를 제공하는 웹서비스를 'RESTful'하다고 할 수 있다. 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭한다.

HTTP Method

HTTP Method
전송 형태
설명
GET
GET [request-uri]?query_string HTTP/1.1
Host:[Hostname] 혹은 [IP]
요청받은 URI의 정보를 검색하여 응답
POST
POST [request-uri] HTTP/1.1
Host:[Hostname] 혹은 [IP]
Content-Lenght:[Length in Bytes]
Content-Type:[Content Type]
[데이터]
요청된 자원을 생성한다.
PUT
PUT [request-uri] HTTP/1.1
Host:[Hostname] 혹은 [IP]
Content-Lenght:[Length in Bytes]
Content-Type:[Content Type]
[데이터]
요청된 자원을 수정(UPDATE)한다.
DELETE
DELETE [request-uri] HTTP/1.1
Host:[Hostname] 혹은 [IP]
요청된 자원을 삭제할 것을 요청
PATCH
PATCH [request-uri] HTTP/1.1
Host:[Hostname] 혹은 [IP]
Content-Lenght:[Length in Bytes]
Content-Type:[Content Type]
[데이터]
PUT과 유사하게 요청된 자원을 수정(UPDATE)할 때 사용.
PUT의 경우 자원 전체를 갱신하는 의미지만,
PATCH는 해당 자원의 일부를 교체하는 의미로 사용

Content-Type

해당 개체에 포함되는 미디어 타입 정보를 말하며 응답 내에 있는 Content-Type 헤더는 클라이언트에게 반환된 컨텐츠의 컨텐츠 유형이 실제로 무엇인지를 알려준다.
컨텐츠의 타입(MIME 미디어 타입)과 문자 인코딩 방식(EUC-KR, UTF-8등)을 지정한다.

문법
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=somthing

HTTP code

응답 대역
응답 코드
설명
성공200OK

201Created
PUT 메소드에 의해 원격지 서버에 파일 생성됨

203서버가 클라이언트 요구 중 일부만 전송

204No content
요구한 데이터를 변경된 타 URL에 요청함 / Redirect된 경우
클라이언트
요청 에러
400Bad Request
사용자의 잘못된 요청을 처리할 수 없음

401인증이 필요한 페이지를 요청한 경우

403접근 금지

404Not found
요청한 페이지 없음

405허용되지 않는 http method 사용함

408요청 시간 초과

410영구적으로 사용 금지

412전체 조건 실패

414요청URL길이가 긴 경우
서버에러500내부 서버 오류

501웹 서버가 처리할 수 없음

503서비스 제공 불가

504Gateway timeout
게이트웨이 시간 초과

505해당 http 버전 지원되지 않음

URL과 URI의 의미
  1. URL(Uniform Resource Locator) : 통합 자원 지시자
    1. 예를 들어 http://test.com/work/test.pdf 는 test.com 서버에서 work 폴더 안의 test.pdf를 요청하는 URL을 의미한다.
  2. URI(Unitform Resource Identifier) : 통합 자원 식별자
    1. 프로토콜 + : + // + 호스트이름 + 주소 → http://test.com
    2. 자원에 접근하기 위해 사용되는 절차
    3. 어떤 자원을 가지고 있는 특정한 컴퓨터
    4. 컴퓨터 상의 유니크한 자원의 이름(파일명)
  3. URN(Uniform Resource Name) : 리소스의 위치와 상관없이 리소스의 이름값을 이용하여 접근하는 방식

URI
URNURL
test.com/test.htmlhttps://test.com/test.html
test2.com/image.pngftp://test2.com.file.pdf
URI >= URL, URN