API 서버개발

RestFul API 정리 (URL,Methods,Message)

K2ODING 2022. 1. 3. 16:31
728x90

API

  • 응용 프로그램에서 사용할수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
  • API를 통해 소스 및 DB에는 접근하지 못하게 하고 해당 프로그램을 사용할 수 있도록 기능을 제공하게하는 것이다.

RestFul API

 

REST

  • 서버나 서비스에 존재하는 모든 자원 (이미지, 동영상, DB 자원)에 고유한
  • URI를 부여해 활용하는 것 =  자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미

 

통신을 위한 rest 구성

  • 자원(Resource) - http://service.com/users라는 형태의 URI
  • 행위(Method) - GET/POST/DELETE/PUT과 같은 메소드
  • 표현(Message) - JSON, XML 등의 형태를 이용해 표현

 

URI (URL) 구성명칭

구성명칭 중요

 

Methods

  • GET
  • GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.
  • HEAD
  • HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않습니다.
  • POST
  • POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
  • PUT
  • PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다.
  • DELETE
  • DELETE 메서드는 특정 리소스를 삭제합니다.
  • CONNECT
  • CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.
  • OPTIONS
  • OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다.
  • TRACE (en-US)
  • TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다.
  • PATCH
  • PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.   

출처 https://developer.mozilla.org/ko/docs/Web/HTTP/Methods

 

Message

JSON이란?

JSON(javascript Object Notation)라는 의미의 축약어로 데이터를 저장하거나 전송할 때 많이 사용 되는경량의 DATA 교환 형식을 의미한다.

  • Javascript에서 객체를 만들 때 사용하는 표현식.
  • 사람과 기계 모두 이해하기 쉬우며 용량이 작아서, 최근에는 XML을 대체해서 데이터 전송에 사용한다.
  • 데이터 포맷일 뿐이며 어떠한 통신 방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법.

JSON 특징

  • 서버와 클라이언트 간의 교류에서 일반적으로 많이 사용 된다.
  • Javascript 객체 표기법과 아주 유사하다.
  • Javascript 이용하여 JSON 형식의 문서를 쉽게 Javascript 객체로 변환할 수 있는 이점이 있다.
  • JSON 문서 형식은 Javascript 객체의 형식을 기반으로 만들어졌다.
  • Javascript의 문법과 굉장히 유사하지만 텍스트 형식 일 뿐이다.
  • 다른 프로그래밍 언어를 이용해서도 쉽게 만들 수 있다.
  • 특정 언어에 종속되지 않으며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 핸들링 할 수 있는 라이브러리를 제공한다.

개인적으로 key-value 형식으로 데이터를 저장하고 출력할 수 있기에 간편한 느낌.

XML vs JSON

  • 데이터를 나타낼 수 있는 방식은 여러가지가 있지만, 대표적인 것이 XML고, 이후 가장 많이 사용 되는 것이 아마도 JSON일 것이다.

XML

  • 데이터 값 양쪽으로 태그가 있다. (HTML을 근본으로 했기에 태그 라는 것이 없을 수가 없는데, 그 태그를 줄인다 해도 최소한 표현하려면 양쪽에 몇 글자가 존재 해야 한다.

JSON

  • 태그로 표현하기 보다는 중괄호({}) 같은 형식으로 하고, 값을 ','로 나열하기에 그 표현이 간단하다.

JSON 문법

{
  "employees": [
    {
      "name": "Surim",
      "lastName": "Son"
    },
    {
      "name": "Someone",
      "lastName": "Huh"
    },
    {
      "name": "Someone else",
      "lastName": "Kim"
    } 
  ]
}

JSON 형식은 Javascript 객체와 마찬가지로 key / value가 존재할 수 있으며 key값이나 문자열은 항상 " "를 이용하여 표기 해야 한다.

  • 객체, 배열 등의 표기를 사용할 수 있다.
  • 일반 Javascript의 객체처럼 원하는 만큼 중첩시켜서 사용할 수도 있다.
  • JSON형식에서는 null, number, string, array, object, boolean을 사용할 수 있다.

출처 https://velog.io/@ym1085/JSON-%EC%82%AC%EC%9A%A9%EB%B2%95

 

Request

HTTP Request(요청)는 백엔드(서버)에서 데이터를 처리하기 위한 또는 가져오기 위한 메세지이다.
메세지의 구조는 크게 세 부분으로 구성되어있다.

1. Start Line
요청의 첫번 째 줄이며, 시작 줄도 세 부분으로 구성되어있다.

  • HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. GET, POST, DELETE 가 주로 쓰임.
  • Request target: 해당 request 가 전송되는 목표 url
  • HTTP Version: 사용되는 HTTP 의 버전. 주로 1.1이 쓰인다.

    ex) GET /login HTTP/1.1
    GET 메서드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보냄

2. Header
해당 요청에 대한 추가 정보(메타 데이터)를 담고 있는 부분.

  • key : value 값으로 되어있다. 자주 사용되는 HEADER 의 정보는 아래와 같다.
Headers:{
  HOST: 요청을 보내는 타켓의 주소. 웹사이트는 기본 주소 (ex: www.naver.com)
  User-Agent: 요청을 보내는 클라이언트에 대한 정보 (ex: chrome, firefox 등)
  Content-Type: 해당 요청이 보내는 메세지 body 타입 (ex: application/json 등)
  Content-Length: body 내용의 길이
  Authorization: 회원 인증/인가를 처리하기 위해 로그인 토큰을 Authorization 에 담는다.
}

3. Body
해당 요청의 실제 내용. 주로 body 를 사용하는 메서드는 POST 이다.

body{
  "email"     : "aaa@aaa.com",
  "user_name" : "swd"
}

 

Response

요청과 마찬가지로 Response 도 메세지이다.
HTTP 규약에 따른 응답의 구조도 크게 3부분으로 나뉜다.

1. Start Line
응답의 상태 줄. 응답은 요청에 대한 처리 상태를 클라이언트에게 알려주면서 시작한다.

  • HTTP Version - 요청의 HTTP버전과 동일
  • Status Code - 응답 메세지의 상태 코드
  • Status Text - 응답 메세지의 상태를 간략하게 설명해주는 텍스트

    ex) HTTP/1.1 404 Not Found
    ex) HTTP/1.1 200 SUCCESS

2. Headers
요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고 있는 부분이다.
다만, 응답에서만 사용되는 헤더의 정보들이 있는데, 요청하는 브라우저의 정보가 담긴 User-Agent 대신 Server 헤더가 사용된다.
-추가 조사 필요(업데이트 예정)

3. Body
요청의 Body 와 일반적으로 동일하다.
요청의 메서드에 따라서 Body 가 항상 존재하지 않듯이, 응답도 응답의 형태에 Body 가 없을 수 있다. 주로 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 이다.

 

#정리
1. HTTP 는 컴퓨터 끼리의 소통을 위한 통신 규약이다.
2. HTTP 통신은 Request(요청)과 Response(응답)으로 이루어진다.
3. HTTP 통신의 매 요청과 응답은 이전의 상태를 알지 못한다. (Stateless)

출처 https://velog.io/@pm1100tm/HTTP%EC%9D%98-%ED%8A%B9%EC%A7%95-Request-%EC%99%80-Response