CS

REST와 JSON에 대해

땅지원 2022. 5. 13. 20:38

REST의 등장 배경

HTTP는 GET, POST, PUT, DELETE 등의 다양한 HTTP 메소드를 지원

실제로는 서버가 각 메소드의 기본 설명을 따르지 않아도 프로그램 개발 가능

하지만 저마다 다른 방식으로 개발하면 문제가 될 수 있어 기준이 되는 아키텍처가 필요

REST(Representational State Transfer)

각 자원(Resource)에 대하여 자원의 상태에 대한 정보를 주고받는 개발 방식

자원, 행위, 표현의 형태로 데이터를 주고 받자고 약속을 한 것임

페이로드(payload) :  데이터를 전송할 때, 헤더와 메타데이터, 에러 체크 비트 등과 같은 다양한 요소들을 함께 보내어, 데이터 전송의 효율과 안정성을 높히게 되는데 이 때, 보내고자 하는 데이터 자체를 의미하는 것

ex) json에서 보면 payload는 data가 된다

{
	"status" : 
	"from": "localhost",
	"to": "http://melonicedlatte.com/chatroom/1",
	"method": "GET",
	"data":{ "message" : "There is a cutty dog!" }
}

API

프로그램이 상호작용하기 위한 인터페이스

S/W가 다른 S/W로 부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단

 

REST API

REST 아키텍처를 따르는 API

HTTP 요청을 보낼 때 어떤 URI에 어떤 메소드를 사용할지 개발자들 사이에 널리 지켜지는 약속
형식이기 때문에 기술에 구애X

REST API 호출 : REST 방식을 따르고 있는 서버에 특정한 요청을 전송 하는것을 의미

 

REST 구조를 설정했으면 데이터를 주고받을 때 어떠한 형식으로 주고받을지 정해야함 => JSON

 

JSON (JavaScript Object Notation)

데이터를 주고받는데 사용하는 경량의 데이터 형식

key, value 쌍으로 이루어진 데이터 객체를 저장

import json

user = {'id' : 'jiwon',
        'password' : '1234asdf',
        'age' : 26,
        'hobby' : ['programming', 'music']
        }

json_data = json.dumps(user,indent=4)
print(json_data)
{
    "id": "jiwon",
    "password": "1234asdf",
    "age": 26,
    "hobby": [
        "programming",
        "music"
    ]
}

 

 

Ex) REST API 호출하여 회원 정보를 처리하는 예제

import requests

#REST API 경로에 접속하여 응답 데이터 받아오기(GET)
target = 'https://jsonplaceholder.typicode.com/users'
response = requests.get(url=target)

# 응답이 json 형식이여서 파이썬 객체로 변환
data = response.json()

# dictionary 형태이기 때문에 이름 정보만 꺼내기 위해 key를 name으로
name_list = []
for user in data:
    name_list.append(user['name'])
print(name_list)