REST
- 2000년 로이 필딩(Roy Fielding)의 박사 논문에서 제안한 소프트웨어 아키텍처 스타일
- 웹 기반 시스템(클라이언트-서버 구조)을 어떻게 설계할지를 정해주는 규칙
- REST자체가 어떠한 기술, 프로토콜, 형식이 아닌 설계 철학중 하나임
- 웹의 기본 원리를 그대로 따르면서, 리소스를 URL로 표현, HTTP 메서드 행위를 구분하는 설계 방식
RestAPI(REpresentational State Transfer)
- Rest를 기반으로 만들어진 API
- 클라이언트가 HTTP 프로토콜을 이용하여 서버의 리소스를 요청, 조작하는 방식
실습
url = 'https://api.github.com/repositories'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
for repo in data:
node_id = repo.get('node_id')
name = repo.get('name')
owner_login = repo.get('owner').get('login')
print(f"node_id : {node_id}, name : {name}, owner_login : {owner_login}")
else:
print('API활용 실패', response.status_code)

request = urllib.request.Request(url)
response_urlib = urllib.request.urlopen(request)
if response_urlib.getcode() == 200:
data = json.loads(response_urlib.read().decode())
for repo in data:
node_id = repo.get('node_id')
name = repo.get('name')
owner_login = repo.get('owner').get('login')
print(f"node_id : {node_id}, name : {name}, owner_login : {owner_login}")
else:
print('API활용 실패', response.status_code)

HTTP 상태 코드
| 코드 | 의미 | 설명 |
|---|
| 100 | Continue | 요청이 계속 진행 중이며, 클라이언트는 요청을 계속 전송해야 함 |
| 코드 | 의미 | 설명 |
|---|
| 200 | OK | 요청이 성공적으로 처리됨 |
| 201 | Created | 새로운 리소스가 성공적으로 생성됨 (POST 요청 등) |
| 204 | No Content | 요청 성공, 하지만 반환할 데이터 없음 (예: DELETE 요청 후) |
| 코드 | 의미 | 설명 |
|---|
| 301 | Moved Permanently | 리소스가 영구적으로 다른 URL로 이동됨 |
| 302 | Found | 리소스가 임시로 다른 URL에 위치함 |
| 304 | Not Modified | 캐시된 리소스와 서버의 리소스가 동일, 새 데이터 필요 없음 |
| 코드 | 의미 | 설명 |
|---|
| 400 | Bad Request | 요청 문법이 잘못되었거나 유효하지 않음 |
| 401 | Unauthorized | 인증 필요 (로그인 또는 토큰 등) |
| 403 | Forbidden | 인증은 되었지만 권한이 없어 접근 불가 |
| 404 | Not Found | 요청한 리소스를 찾을 수 없음 |
| 405 | Method Not Allowed | 해당 리소스에서 지원하지 않는 HTTP 메서드 사용 |
| 코드 | 의미 | 설명 |
|---|
| 500 | Internal Server Error | 서버 내부 오류 (예상치 못한 문제) |
| 502 | Bad Gateway | 게이트웨이 또는 프록시 서버에서 잘못된 응답 수신 |
| 503 | Service Unavailable | 서버가 과부하이거나 유지보수 중이라 요청 처리 불가 |
| 504 | Gateway Timeout | 게이트웨이가 응답 대기 시간 초과로 요청 실패 |