* API란?
- Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말
- 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘
- ex) 기상청의 소프트웨어 시스템의 일일 기상 데이터 - 휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시
* REST란?
- REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
- HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미
- 구성 요소
- 자원(Resource) : URI
- 자원에 대한 행위(Verb) : HTTP Method
- 표현 (Representations) : 서버 간 데이터를 주고받는 형태를 말하는 것으로 JSON, XML이 대표적
✔️ URI와 URL 차이
- URI(Uniform Resource Identifier) - 통합 자원 식별자
- 인터넷상의 리소스 "자원 자체"를 식별하는 고유한 문자열 시퀀스
- ex) elancer.co.kr
- URL(Uniform Resource Locator) - 통합 자원 위치
- 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타내는 표기법
- ex) https://elancer.co.kr (프로토콜 'https'포함)
- URL은 일종의 URI이며 프로토콜과 결합한 형태라고 볼 수 있다.
- URN은 경로(path)에 해당
- Scheme: 리소스에 접근하는 데 사용하는 프로토콜
https - 기본 포트 443 사용
http - 기본 포트 80번 사용
- Host : 접근할 대상(서버)의 호스트명
- Path: 접근할 대상(서버)의 경로에 대한 상세정보
✔️CRUD Operation이란?
- 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말
Create : 데이터 생성(POST)
Read : 데이터 조회(GET)
Update : 데이터 수정(PUT, PATCH)
Delete : 데이터 삭제(DELETE)
* REST API란?
- REST API(Representational State Transfer API)란 REST의 원리를 따르는 API를 의미
- HTTP 프로토콜 이용
- URI, HTTP 메소드를 통해 자원에 대한 CRUD 연산을 하면 REST를 통해 API가 동작
- 장점
- HTTP를 따르는 모든 플랫폼에서 이용 가능
- 메세지(URI)만으로도 요청 추론 가능
✔️RESTful API
- REST API의 설계 규칙을 올바르게 지킨 시스템을 RESTful하다 말함
- REST API는 API가 REST 방식으로 동작하는 것
- REST API 설계 규칙
1. URI는 동사보다 명사 / 대문자보다 소문자 사용 권장
❌ http://pje72.com/Running/
⭕ http://pje72.com/run/
2. 마지막에 슬래시(/) 포함하지 않음
❌ http://pje72.com/test/
⭕ http://pje72.com/test
3. 언더바 대신 하이폰 사용
❌ http://pje72.com/test_blog
⭕ http://pje72.com/test-blog
4. 파일 확장자는 URI에 포함하지 않음
❌ http://pje72.com/test/
⭕ http://pje72.com/test
- REST API의 파라미터 타입
- header 파라미터 : 리퀘스트 헤더에 포함된 파라미터 (보통 인증, 권한 부여에 관련되어 있음)
- path 파라미터 : 엔드포인트(URL)에서 쿼리문 이전의 파라미터
/service/myresource/user/{user}/bicycles/{bicycled}
=> {user}와 {bicycleld}에 각각 그 값이 들어감
=> 가변 경로라고도 불림
*보통 특정 리소스를 정의할 필요가 있을 때 사용
- query string 파라미터 : 쿼리문 내의 파라미터. 엔드포인트(URL)가 끝난 뒤 물음표(?) 뒤에 옴
/surfreport?days=3&units=metric&time=1400
=> 물음표 뒤에 등장하는 쿼리 파라미터
=> key=value 형태
*보통 정렬 / 필터링이 필요할 때 사용
- request body 파라미터 : 리퀘스트 바디에 포함된 파라미터. 보통 JSON 형식으로 제출됨
* HTTP Method
데이터 연산 | HTTP method |
CREATE (생성) | POST |
READ (읽기) | GET |
UPDATE (전체수정) | PUT |
UPDATE (부분수정) | PATCH |
DELETE (삭제) | DELETE |
- 모든 API 호출은 HTTP 메서드와 URL의 조합으로 이루어짐
- HTTP 메서드 : 리소스에 접근한 후 동작을 나타내는 것
- 종류
- GET - 리소스 조회
- 데이터 검색, 파일 다운로드하는 API에 사용
- POST - 리소스 생성
- 데이터 등록, Bot 메시지 전송, 파일 업로드 등 데이터 전송 API에 사용
- 요청 내용 request body에 지정
- POST 요청으로 객체를 생성하면 일반적으로 생성된 객체가 응답으로 반환
- PUT - 리소스 수정
- 데이터를 수정하는 API에 사용
- 일반적으로 수정된 객체가 응답으로 반환
- 리소스는 request body에 지정된 값으로 변경
- 지정하지 않은 속성은 기본값으로 대체 / null 값을 지정한 것으로 처리 -> 손실됨
- PATCH - 리소스 부분 수정
- 데이터의 일부를 업데이트하는 API에 사용됨
- 일반적으로 수정된 객체가 응답으로 반환
- request body에서 지정한 속성만 수정, 지정하지 않은 속성의 값은 유지
- DELETE - 리소스 삭세
- 데이터 삭제하는 API에 사용
- GET - 리소스 조회
* 응답 코드
- 200 : 클라이언트 요청 정상수행 (응답에 대한 메시지가 포함)
- 201 : 리소스 생성 요청에 대한 정상처리
- 202 : 리소스 생성 요청이 비동기적으로 처리될 때 사용
- 204 : 클라이언트 요청 정상수행 (응답에 대한 메시지 미포함, 삭제요청 따위에 사용)
- 400 : 클라이언트 요청이 부적절할 때 사용 (부적절한 이유를 응답 Body에 넣어줘야 함)
- 401 : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청할 때 사용
- 403 : 클라이언트가 인증상태와 무관하게 응답하고 싶지 않은 리소스를 요청할 때 사용 (400 사용을 권장)
- 404 : 클라이언트가 요청한 리소스가 존재하지 않을 때 사용
- 405 : 클라이언트가 불가능한 메소드를 사용했을 때