Print
카테고리: [ Miscellaneous ]
조회수: 6198

1. 배경

2000년 Roy Fielding(로이 필딩)의 논문에서 발표됐다. Roy Fielding이 기존의 아키텍처가 웹 본래 설계의 우수성을 많이 사용하지 못하고 있다고 판단하여 웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍처로 설계한 것이다.

Roy Fielding는 웹의 창시자(HTTP) 중 한 사람이다.


2. 정의

REST는 ROA(Resource Oriented Architecture)를 따르는 웹서비스 아키텍처로 REST의 가장 큰 특징 중 하나가 모든 자원을 리소스로 표현한다는 것이다.

HTTP URI + HTTP Method => HTTP URI로 대상 자원을 명시하고 HTTP Method로 해당 자원에 대한 행위를 지정하는 방식으로 동작


3. REST의 구성요소

위의 구성요소를 표현해보면,

    HTTP Post , http://sarc.io/
    {
     "users":{
      "name":"someName"
     }
    }

REST에서는 CRUD에 해당하는 4가지 HTTP 메서드만 사용한다. (POST, GET, PUT, DELETE)

주의사항이다.


4. REST 특성


5. REST의 문제점


6. REST API 보안

6.1. Key 방식

가장 기본적인 방법으로 서비스 제공자가 발급한 Key를 통해 인증하는 방식이다. Key는 특정 사용자만 알고 있는 문자열로 구성되어 있으며, 사용자는 메시지 내에 Key를 포함하여 호출한다.

Key가 노출되면 전체적인 보안 이슈가 생기기 때문에 높은 보안 수준이 요구되는 곳에는 적합치 않다.

6.2. 토큰 방식

토큰을 통해 API 서비스 인증을 한다. ID/PW 인증을 통해 사용자에게 토큰이 발행되는데 이 토큰은 사용 가능한 시간이 유효하다. 

토큰을 사용하게 되면 토큰이 노출되더라도 ID/PW는 노출되지 않는 장점이 있다.

6.3. HTTP Basic Auth

Base 64 인코딩된 ID/PW 정보를 HTTP 헤더에 넣어 인증한다. 반드시 HTTPS를 사용해야 한다. 그렇지 않으면 Base 64 디코더를 통해 ID/PW가 노출된다.

6.4. Digest Access Authentication

HTTP Basic Auth의 단점을 극복하기 위해 나온 방식으로 서버에서 난수 생성 후 ID/PW 정보를 해시화한다. 생성된 난수는 서버와 클라이언트가 모두 알고 있다.

난수를 통해 해시한다고 해도 MD5 등 해시 방식에 따라 보안 수준은 달라진다. 보안 수준이 낮은 해시 방식을 사용할 때는 HTTPS 사용이 권장된다.

6.5. 제3자 인증

OAuth 2.0이 대표적이다.


7. REST API 테스트


8. API 설계

마이크로 서비스들은 각각 독립성을 가지고 동작한다. 따라서 독립된 버전을 가진다.

8.1. 버전 관리

하위 호환성과 독립된 버전을 가지는 것이 특징이다. [서비스명/버전/리소스] 형태로 구성된다.

예를 들면 /v1, /v2 등이다.

8.2. REST API

자원을 정의하고(URI), 행위를 정의하고(Method), 행위의 내용을 정의(HTTP Message Pay Load)


9. GET

9.1. Code

@GetMapping("/orders/{id}")
public Order getOrder(@PathVariable("id") long id) {
  return orderService.findOrder(id); 
}

9.2. Request

GET /store/orders/5500
Host: shop.sarc.io
Accept: application/json

9.3. Request

HTTP/1.1 200 OK
Date: ...
Content-Length: 956
Content-Type:
application/json
{
   "id": 5500,
   "total": 256.00,
   "items": [ ... ]
}