키워드 : RESTful API, GraphQL, OAuth 2.0, 멱등성, HTTP 상태코드
RESTful API의 설계 원칙
Representational State Transfer : API 설계를 위한 아키텍처 스타일 중 하나로,URI를 통해 자원을 표시하고, HTTP Method를 이용하여 리소스에 접근하며 그 결과를 받는 것을 의미한다.
REST와 SOAP의 차이점
SOAP는 서버와 매우 긴밀하게 연결되기 때문에 그 통신 방식이 매우 엄격하며, 그래서 수정이나 업데이트를 하는 것이 보다 더 어렵다. REST 방식의 API에서는 클라이언트에서 해당 API가 필요하지 않지만, SOAP 방식의 API에서는 상호작용을 시작할 때조차도 클라이언트에서 API에 관한 모든 정보들을 필요로 한다.
 웹 서비스에서는 SOAP가 확실하게 좋은 방법이 아니라면 개발자들이 REST 방식의 API를 택하는 경우가 많으며, 은행용 등 기업용 애플리케이션인 경우에는 보다 많은 리소스와 엄격한 보안 그리고 여러 다양한 요구 사항들을 만족해야 하기 때문에 SOAP 방식을 택하는 경우가 많다.
API 버전 관리의 중요성과 방법
api 경로에 /api/v1 와 같은 버전 정보를 포함시키는 이유는 api의 유지보수성과 확장성을 높이기 위한 전략적 선택이다. 
GraphQL과 REST API의 차이점
GraphQL(graph query language)은 API를 위한 쿼리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임이다. 특정한 db나 특정한 스토리지 엔진과 관계되어 있지 않으며 기존 코드와 데이터에 의해 대체된다.
sql이 db로부터 데이터를 가져오는 목적이라면, GraphQL은 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 한다.
REST API
→ example.com/class
→ example.com/class/{반 index}
→ example.com/class/{반 index}/students
→ example.com/class/{반 index}/students/{학생 index}
GraphQL
→ example.com/graphql
(하나의 엔드포인트에 다른 쿼리를 사용해 요청)  REST API의 경우 반에 속해있는 데이터를 가져오는데 응답마다 다양한 엔드포인트를 가지게 된다. 하지만 GraphQL은 하나의 엔드포인트(root endpoint)에 다른 쿼리로 요청함으로써 다른 응답을 받을 수 있다.// REST API request
GET, https://swapi.dev/api/people/1
// REST API response
{
    "name": "Luke Skywalker",
    "height": "172",
    "mass": "77",
    "hair_color": "blond",
    "skin_color": "fair",
    "eye_color": "blue",
    "birth_year": "19BBY",
    "gender": "male",
    "homeworld": "http://swapi.dev/api/planets/1/",
    "films": ["http://swapi.dev/api/films/1/", "http://swapi.dev/api/films/2/", "http://swapi.dev/api/films/3/", "http://swapi.dev/api/films/6/"],
    "species": [],
    "vehicles": ["http://swapi.dev/api/vehicles/14/", "http://swapi.dev/api/vehicles/30/"],
    "starships": ["http://swapi.dev/api/starships/12/", "http://swapi.dev/api/starships/22/"],
    "created": "2014-12-09T13:50:51.644000Z",
    "edited": "2014-12-20T21:17:56.891000Z",
    "url": "http://swapi.dev/api/people/1/"
}// GraphQL request
query {
    person(personID: 1) {
        name
        height
        mass
    }
}
// GraphQL response
{
    "data": {
        "person": {
            "name": "Luke Skywalker",
            "height": 172,
            "mass": 77
        }
    }
}OAuth 2.0를 사용한 인증 방식
OAuth 2.0(open authorization 2.0)은 인증을 위한 개방형 표준 프로토콜이다. 이 프로토콜에서는 third-party 프로그램에게 리소스 소유자를 대신하여 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 방식을 제공한다.
구글, 카카오, 네이버 등에서 제공하는 간편로그인 기능도 OAuth2를 기반으로 한다.
HTTP 상태 코드 중 200, 404, 500의 차이와 각각의 의미
HTTP 상태 코드는 클라이언트가 서버에 요청을 보낼시 서버가 클라이언트에게 응답으로 제공하는 상태 정보를 나타낸다.
멱등성(Idempotency)
멱등성이란 연산을 여러 번 수행하더라도 결과가 동일하게 유지되는 특성을 의미한다. 이는 주로 API 설계 및 HTTP 메서드의 동작에서 중요하게 고려된다.
API 문서를 자동으로 생성하는 방법(Spring REST Docs 등)
Spring 기반 프로젝트에서는 API 문서를 자동으로 생성하기 위한 도구로는 Spring REST Docs와 Swagger/OpenAPI가 있다.
HATEOAS(Hypermedia as the Engine of Application State)
HATEOAS란 RESTful API 설계 원칙 중 하나로, 클라이언트가 서버에서 제공하는 하이퍼미디어 링크를 통해 애플리케이션의 상태 전이를 동적으로 탐색할 수 있도록 하는 개념이다.
HATEOAS는 클라이언트와 서버 간의 결합도를 낮추고, API의 확장성과 유연성을 높이기 위해 사용된다.
HTTP/2와 HTTP/1.1의 차이점