[5주차] URIㆍURL & REST API

devyumi·2023년 10월 12일

Network

목록 보기
11/11

URI

ㆍ 리소스를 식별하기 위해 사용하는 문자열

ㆍ URL, URN을 포함하는 상위 개념임


URL

ㆍ 리소스의 위치를 나타내는 문자열

리소스 식별 방법: 위치

ㆍ 리소스의 위치가 변경되면 URL도 변경되어야 함 (Ex. 페이지를 찾을 수 없습니다.)

프로토콜, 도메인, 포트, 쿼리 문자열로 구성됨

ㆍ 리소스의 위치는 Path(webtoon) 값까지만 알아도 알 수 있음

ㆍ tab 값에 따라 리소스 결과가 다르게 도출됨으로 Parameter(tab)은 리소스의 식별자 역할을 함


URN

ㆍ 리소스에 이름을 부여하는 문자열

리소스 식별 방법: 이름

ㆍ 리소스의 위치와 상관없이 이름이 부여되기 때문에 위치가 변경되어도 리소스를 찾을 수 있음

ㆍ 프로토콜을 포함하지 않음

ㆍ Ex) urn:isbn:0-395-12356-2




API

프로그램들이 서로 상호작용하는 것을 도와주는 매개체

ㆍ 내부 코드가 어떻게 구현되었는지 몰라도 쉽게 기능을 가져와 쓸 수 있음

ㆍ Ex) <전시회 예약 프로그램>을 개발할 때 결제 기능을 직접 개발하지 않고, "카카오페이 API"를 사용할 수 있음

API는 프로그램(손님)이 요청(주문)할 수 있게 기능(메뉴)을 정리하고, 요청(주문)을 받으면 응용프로그램(요리사)와 상호작용하여 요청된 기능(메뉴)을 응답함


유형

1) private API
 : 제3자에게 노출되지 않는 API. 보통 사내에서 사용함

2) public API
 : 모두에게 공개되는 API

3) partner API
 : 동의하는 특정인만 사용 가능한 API. 회사 간 데이터 공유에서 사용함

종류

ㆍ SOAP, REST, RPC 등


장점

개발 시간 단축, 비용 절약
  : 결제 기능을 직접 만드는 것보다 이미 개발되어 있는 카카오페이 API를 사용하면 됨

코드 작성법을 표준화하여 협업, 비즈니스 확장에 용이함

단점

보안 문제
 : API 해킹 시 데이터 유출 사고의 원인이 됨 (DB에 접근이 가능하기 때문에)
  따라서 토큰, 암호화 및 서명, 제한 등의 방법을 사용하여 API 보안에 유의해야 함


REST

ㆍ HTTP 기반으로 자원(리소스)에 접근하는 방법

ㆍ HTTP URI로 자원을 명시할 것

ㆍ CRUD Operation을 HTTP 메서드로 나타낼 것

CRUD Operation & HTTP 메서드


REST 구성 요소

1) 자원(Resource): HTTP URI

2) 자원에 대한 행위(Verb): HTTP Method

3) 자원에 대한 행위의 내용(Representations): HTTP Message Pay Load


REST 제약 조건

1) 클라이언트-서버 구조
ㆍ 클라이언트는 사용자 인증, 세션 정보를 관리하고 책임짐
ㆍ 서버는 API 제공 역할을 함
ㆍ 각 역할을 확실히 구분하여 의존성을 줄임

2) 무상태성
ㆍ 상태 정보를 따로 저장하지 않아 들어오는 요청만을 단순하게 처리함
ㆍ 서비스의 자유도가 높아짐

3) 캐시 처리
ㆍ HTTP의 캐시 기능을 적용하여 대량의 요청을 효율적으로 처리함
ㆍ 캐싱을 사용해 응답 시간을 빠르게 하고 서버의 자원 이용률을 향상 시킴

4) 유니폼 인터페이스
ㆍ 특정 언어나 기술에 종속 받지 않는 특징
ㆍ HTTP를 사용하는 모든 플랫폼에서 요청 가능하게 함

5) 계층화 구조
ㆍ 클라이언트는 REST API 서버만 호출 가능
ㆍ 서버는 계층화 되어 있어 구조를 유연하게 하고 유지 보수에 용이함

6) 자체 표현 구조
: REST API 메시지만 보고도 쉽게 이해할 수 있는 구조로 이루어짐


REST API

ㆍ REST 기반으로 API를 구현한 것

ㆍ 대부분의 Open API는 REST로 구현되어 있음


REST API 설계 규칙

1) 동사보다 명사, 대문자보다 소문자 사용할 것

(o) https://example.com/run
(x) https://example.com/Running

2) 마지막에 슬래시(/)를 포함하지 않을 것

(o) https://example.com/run
(x) https://example.com/Running/

3) 언더바(_)대신 하이폰(-)을 사용할 것

(o) https://example.com/run-test
(x) https://example.com/Running_test

4) 파일 확장자를 포함하지 않을 것

(o) https://example.com/photo
(x) https://example.com/photo.png

5) 행위를 포함하지 않을 것

(o) https://example.com/post/1
(x) https://example.com/delete-post/1

RESTful

ㆍ REST의 설계 규칙을 지키며 개발한 시스템을 지칭함

ㆍ 이해하기 쉽고 용이한 REST API를 만드는 것을 목적으로 둠




참고

https://mygumi.tistory.com/139
https://jeongkyun-it.tistory.com/157
https://www.youtube.com/watch?v=ckSdPNKM2pY
https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
https://meetup.nhncloud.com/posts/92

profile
Web Back-end Junior Developer

0개의 댓글