새로운 글
새로운 덧글

공통 [REST API] REST API 이해하기

2017.05.23 13:37

험프리 조회 수:721

이 글에서는 REST 아키텍처를 소개합니다.

 

 

REST는?

REST(Representational State Transfer)는 인터넷 상의 컴퓨터 시스템간 상호 운용성을 제공하는 방법 중 하나입니다. 

 

REST는 HTTP 기반으로 필요한 자원에 접근하는 방식을 정해놓은 네트워크 아키텍처입니다.

여기서 자원이란, 저장된 데이터(DBMS 등)는 물론, 이미지/동영상/문서(PDF 등)와 같은 파일, 서비스(이메일 전송, 푸쉬 메시지 등) 등을 모두 포함합니다.

 

REST는 HTTP의 주요 저자 중 한사람인 로이 필딩의 2000년 박사학위 논문에서 처음 소개되었습니다.

 

REST의 제약조건

아래 REST 제약조건을 준수하는 웹서비스를 RESTful 하다고 합니다.

  • 클라이언트/서버 : 클라이언트와 서버가 각각의 역할 구분. 서버는 API를 제공하고 API 요청 시 비지니스 로직 처리와 데이터 저장을 책임. 클라이언트는 사용자 인증, 상태(세션, 로그인 정보)관리와 서버 리소스 요청을 책임지는 구조로 역할 구분(상호 의존성을 줄임)
  • 무상태(Stateless) : REST 서버는 작업을 위한 상태정보(세션, 쿠키 등)를 관리하지 않아야 함. 시스템 영향없이 관리 및 업데이트 가능
  • 캐쉬(Cacheable) : HTTP 웹표준으로 HTTP가 가진 캐싱 기능이 적용됨
  • 계층화(Layered system) : 서버를 다중 계층으로 구성될 수 있음. 비지니스 로직을 수행하는 API 서버와 그 앞단에 사용자 인증, 암호화, 로드밸런싱 등의 계층을 추가해 구조상의 유연성 제공
  • 인터페이스 일관성(Uniform interface) : 아키텍처를 단순화하고 분리해 각 부분을 독립적으로 발전 시킬 수 있음

REST API

REST 기반으로 서비스 API를 구현한 것을 REST API라고 합니다.

 

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

 

 

또, 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있습니다. 

 

REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있습니다. 

즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있습니다. 물론 반대의 방법도 가능합니다.

REST 주요 구성요소

REST 주요 구성요소는 리소스, 메소드, 메시지 3가지 입니다.

 

  • 리소스 : 접근할 대상, URI를 통해 식별
  • 메소드 : 리소스에 대한 행위, 표준 HTTP 메소드에 따라 자원에 접근(생성, 조회, 수정, 삭제)
  • 메시지 : HTTP 해더와 바디에 포함된 메시지는 메시지를 처리하기 위한 충분한 정보를 포함

즉, REST는 어떤 자원(리소스)에 어떤 행위(메소드)를 어떻게(메시지) 할지 HTTP 기반으로 정해놓은 아키텍처입니다.

 

리소스(자원)

리소스는 URI를 통해 정의합니다.

 

예를 들면, 아래와 같은 URI는 다음과 같은 의미를 갖습니다.

 URI 

 의미 

 http://api.domain.com/books/

 도서정보 콜렉션 

 http://api.domain.com/books/1/ 

 1번 도서 정보 

 http://api.domain.com/books/1/photo/

 1번 도서의 사진

 

리소스명은 동사보다 명사를 활용해 어떤 자원인지 표현하는데 집중해야 합니다.(/getBooks/와 같은 리소스는 적절하지 않습니다.)

 

슬래시(/)는 계층 관계를 나타내며, URI 앞쪽부터 넓은 의미로 사용합니다.

일반적으로 계층은 컬렉션(목록) 하위에 아이템을 지정하는 방식으로 정의합니다.

 

아래와 같이 URI를 구성할 수 있습니다.

/sports/soccer/players/1/

/(컬렉션)/(아이템)/(컬렉션)/(아이템)/

 

메소드

REST에서는 메소드를 통해 리소스에 대한 행위를 정의합니다.

 

표준 HTTP 메소드 중 Get, Post, Put, Delete를 통해 자원의 CRUD를 정의합니다.

 HTTP 메소드

 자원에 대한 행위

 POST

 자원 생성(Create)

 GET

 자원 조회(Read)

 PUT

 자원 수정(Update)

 DELETE

 자원 삭제(Delete)

 

Endpoint

다음과 같이 메소드와 URI를 이용해 리소스에 접근합니다. URI 별 HTTP 메소드로 구현된 항목을 Endpoint라고 합니다.

 HTTP 메소드 

 URI(자원)

 Endpoint의 행위

 POST

 http://api.domain.com/books/

 새로운 도서정보 생성

 GET

 http://api.domain.com/books/

 도서정보 목록 조회

 GET

 http://api.domain.com/books/1/

 1번 도서정보 조회

 PUT

 http://api.domain.com/books/1/

 1번 도서정보 수정

 DELETE

 http://api.domain.com/books/1/

 1번 도서정보 삭제

 

메시지

REST에서 자원에 대한 정보는 HTTP 바디와 HTTP 해더, 응답 상태코드를 활용합니다.

 

 

HTTP 바디

HTTP 바디에 포함된 데이터를 통해 자원에 대한 정보를 전달합니다.

 

데이터 포맷으로는 최근 JSON을 많이 사용하는 추세이며, XML과 사용자정의 포맷 등을 정해서 사용할 수도 있습니다.

 

조회(GET 메소드) 요청 시 서버는 조건에 맞는 정보를 HTTP 바디에 담아 클라이언트에 응답합니다.

생성(POST 메소드), 수정(PUT 메소드) 요청 시 클라이언트는 자원에 대한 정보를 요청 HTTP 바디에 담아 서버에 요청합니다.

 

 

HTTP 해더

HTTP 해더에는 HTTP 바디의 컨텐츠 종류를 명시할 수 있습니다. 해더에 정의된 컨텐츠 타입에 따라 데이터를 분석하도록 구현해야 합니다.

요청 HTTP 해더는 "Accept" 항목으로, 응답 HTTP 해더는 "Content-type"으로 컨텐츠 타입을 설명합니다.

 

 

몇가지 컨텐츠 타입은 다음과 같습니다.

  • application/json
  • application/xml
  • text/plain
  • image/jpeg
  • image/png

미디어 타입, 컨텐츠 타입 자세히 보기 : https://ko.wikipedia.org/wiki/미디어타입

 

응답 상태코드

리소스 요청에 대한 응답은 응답 상태코드로 설명할 수 있습니다.

대표적인 응답 상태코드는 아래와 같습니다.

  • 200 - 요청을 정상 수행
  • 201 - 리소스 생성 요청 성공(Post로 생성 요청 시에 한함)
  • 400 - 요청이 부적절함
  • 401 - 인증되지 않은 상태에서 보호된 리소스 요청
  • 403 - 공개되지 않은 리소스에 접근 요청(인증과 무관)
  • 404 - 존재하지 않는 리소스 요청
  • 406 - 지원하지 않는 미디어타입을 요청
  • 409 - 리소스 상태에 의해 해당 요청을 수행하지 못함

HTTP 상태코드 자세히 보기 : https://ko.wikipedia.org/wiki/HTTP_상태_코드

 

REST API 구현

델파이로 REST API 구현

델파이의 HTTP 라이브러리를 이용핸 REST API를 구현할 수 있습니다.

REST API 구현해 특화된 기술은 서버 측 기술로는 EMS 서버 클라이언트 기술로는 REST 클라이언트 라이브러리가 있습니다.

 

서버(Back-End) 프레임워크

  • RAD Server(EMS Server) - REST API Endpoint 제공
  • WebBroker - RAD 스튜디오(델파이, C++빌더) 웹 개발 프레임워크
  • DataSnap - RAD 스튜디오 멀티티어 개발 프레임워크, TCP/IP, HTTP 프로토콜 제공
  • Delphi MVC Framework - 오픈소스 웹서비스 개발 프레임워크
  • mORMot - 오픈소스 SOA, ORM 개발 프레임워크

 

 

클라이언트(Front-End) 프레임워크

  • REST Client - REST 클라이언트 프레임워크
  • Net HTTP Client - 네이티브 HTTP 클라이언트 프레임워크
  • Indy Library - 범용 네트워크 라이브러리(HTTP 클라리언트, 서버 제공)

 

추가 학습할 내용

EMS 패키지 프로젝트 시작하기

EMS 패키지는 REST API 리소스와 엔드포인트 개발을 지원합니다. EMS 패키지 프로젝트를 만들고, 배포하는 내용을 학습할 수 있습니다.

  • http://blog.hjf.pe.kr/459

REST API 서버 개발하기(엔드포인트 구현, RAD 서버 이용)

EMS 패키지를 이용해 REST API를 제공하는 서버를 개발합니다. 미리 준비된 DB를 이용해 조회, 입력, 수정, 삭제, 이미지 제공 등의 기능을 실습위주로 학습합니다.

  • http://blog.hjf.pe.kr/463

REST API 클라이언트 개발하기(REST 클라이언트 이용)

위에서 작성한 REST API 서버와 연동하는 클라이언트를 개발합니다. REST API를 분석해 조회, 입력, 수정, 삭제, 이미지 수신 기능을 실습위주로 학습합니다.

  • http://blog.hjf.pe.kr/464

 

참고 링크


번호 제목 글쓴이 날짜 조회 수
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 관리자 2017.02.06 886
공지 이 달의 기술자료 & 기술레터 관리자 2017.02.06 322
공지 데브기어 강의 - 2017년 9월~2017년 11월 관리자 2015.01.22 5561
공지 RAD Studio(Delphi, C++Builder) 시작하기 관리자 2015.06.30 8804
공지 RAD 스튜디오로 개발된 모바일 앱 사례(17년 6월 26일 업데이트) 험프리 2014.01.16 146259
749 이 달의 기술자료 - 2017년 06월 file 험프리 2017.05.30 290
748 [발표자료] REST API 웹서비스 연동 관리자 2017.05.29 301
747 [REST API][실습] REST API 클라이언트 개발하기(REST Client 이용) 험프리 2017.05.23 355
746 [REST API][실습] REST API 서버 개발하기(엔드포인트 구현, RAD 서버 이용) 험프리 2017.05.23 334
» [REST API] REST API 이해하기 험프리 2017.05.23 721
744 델파이 코드 분석 도구 험프리 2017.05.16 304
743 애플 개발자 프로그램 구독하지 않고 XCode8을 설정해 iOS앱을 배포하는 방법 험프리 2017.05.15 315
742 안드로이드에서 커스텀 폰트 사용하기 - 델파이 10.2 도쿄 험프리 2017.05.15 135
741 [고객 사례- 조명, 델파이] 나이아가라 폭포 야간 조명 [1] 관리자 2017.05.10 650
740 [업데이트][핫픽스][10,2 도쿄] 툴체인 이슈 핫픽스 험프리 2017.05.10 253
739 [RAD서버] EMS 패키지 프로젝트 시작하기 험프리 2017.04.28 178
738 [RAD서버] EMS 서버 운영환경에 설치하기(독립형 실행파일) 험프리 2017.04.28 270
737 이 달의 기술자료 - 2017년 05월 file 험프리 2017.04.26 234
736 리눅스 서버용 GUI 응용프로그램 만들기(10.2 도쿄 & FMXLINUX 이용) [1] 관리자 2017.04.25 356
735 [환경설정] 아마존 EC2 이용해 리눅스 서버 환경 구축하기 험프리 2017.04.20 366
734 [환경설정] 아마존 EC2 이용해 윈도우 서버 환경 구축하기 [1] 험프리 2017.04.13 385
733 [발표자료] What's NEW! RAD Studio 10.2 도쿄 험프리 2017.04.13 169
732 [고객 사례- 3D, 이미지스캐너, 델파이] mimix 3D 프로필 스캐너 관리자 2017.04.13 231
731 [RAD 서버] 비콘펜스 소개 및 데모(실내외 길찾기, 지역진입 감지하기) [1] 험프리 2017.04.13 214
730 [발표자료] 소개합니다! RAD Studio 10.2 도쿄 관리자 2017.04.06 262


광고 모듈이 설치되어 있지 않아 실행을 중단합니다..