[20220528_REST API]

YunTrollpark·2022년 5월 28일
0

관련 지식

목록 보기
3/7

REST API

API란?

1. API(Application Programming Interface)란
: 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것

2. REST API 정의
• REST 기반으로 서비스 API를 구현한 것
• 최근 OpenAPI(누구나 사용할 수 있도록 공개된 API: 구글맵, 공공 데이터 등), 마이크로 서비스 등을 제공하는 업체 대부분은 REST API를 제공
❈ 마이크로 서비스: 하나의 큰 애플리케이션을 여러개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만들어진 아키텍쳐

REST API의 특징

1. 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보구 및 운용을 편리하게 할 수 있음
→ REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있음

REST API 설계 기본 규칙

<참고 리로스 원형>
• 도큐먼트: 객체 인스턴스나 데이터베이스 레코드와 유사한 개념
• 컬렉션: 서버에서 관리하는 디렉터리라는 리소스
• 스토어: 클라이언트에서 관리하는 리소스 저장소

1. URI는 정보의 자원을 표현해야 함
• resource는 동사보다는 명사를, 대문자보다는 소문자를 사용함
• resource의 도큐먼트 이름으로는 단수 명사를 사용해야함
• resource의 컬렉션 이름으로는 복수 명사를 사용해야함
• resource의 스토어 이름으로는 복수 명사를 사용해야함
Ex) GET / Member/1GET/members/1

2. 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현
• URI에 HTTP Method가 들어가면 안됨
Ex) GET /members/delete/1DELETE /members/1

• URI에 행위에 대한 동사 표현이 들어가면 안됨(즉, CRUD기능을 나타내는 것은 URI에 사용하지 않음)
Ex) GET /members/show/1GER /members/1
Ex) GET /members/insert/2POST /members/2

•경로 부분 중 변하는 유일한 값으로 대체(즉, id는 하나의 특정 resource를 나타내는 고유 값)
Ex) student를 생성하는 route: POST/students
Ex) id=12인 student를 삭제하는 route: DELETE/students/12

REST API 설계 규칙

1. 슬래시 구분자(/)는 계층 관계를 나타내는데 사용
Ex) http://restapi.example.com/houses/apartments

2. URI 마지막 문자로 슬래시(/)를 포함하지 않음
• URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것, 역으로 리소스가 다르면 URI도 달라져야 함
• REST API는 분명한 URI를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는 슬래시(/)를 사용하지 않음
Ex) http://restapi.example.com/houses/apartments/(❌)

3. 하이픈(-)은 URI 가독성을 높이는데 사용
• 불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높임

4. 밑줄(_)은 URI에 사용하지 않음
• 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않음

5. URI 경로에는 소문자가 적합
• URI 경로에 개문자 사용은 피해야함
• RFC3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문

6. 파일 확장자는 URI에 포함하지 않음
• REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI안에 포함 ❌
• Accept header를 사용
Ex) http://restapi.example.com/members/soccer/345/photo.jpg(❌)
Ex) GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg(⭕️)

7. 리소스 간에는 연간 관계가 있는 경우
• /리소스명/리소스ID/관계가 있는 다른 리소스명
•Ex) GET : /users/{userid}/devices (일반적으로 소유 'has'의 관계를 표현할 때)

REST API 설계 예시


<참고 응답상태코드>

• 1xx: 전송 프로토콜 수준의 정보 교환
• 2xx: 클라이언트 요청이 성공적으로 수행됨
• 3xx: 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
• 4xx: 클라이언트의 잘못된 요청
• 5xx: 서버쪽 오류로 인한 상태코드

RESTful의 개념

  1. RESTful이란
    • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용됨
    → 'REST API를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있음'

• RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것 ❌
→ REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭됨

RESTful의 목적

• 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
• RESTful한 API를 구현한는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서 굳이 RESTful한 API를 구현할 필요는 ❌

RESTful하지 못한 경우

Ex) CRUD 기능을 모두 POST로만 처리하는 API
Ex) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)

출처: https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

profile
코딩으로 세상에 이야기하는 개발자

0개의 댓글