REST API는 Representational State Transfer (REST) 아키텍처 스타일을 따르는 애플리케이션 프로그래밍 인터페이스(API)입니다. 클라이언트와 서버 간의 통신을 위해 설계되었으며, 주로 HTTP를 기반으로 동작합니다.
REST는 리소스를 URI로 식별하고, 특정 리소스에 대해 CRUD 작업(Create, Read, Update, Delete)을 HTTP 메소드로 표현합니다. 이를 통해 RESTful하게 설계된 API는 가독성과 유지보수성이 뛰어나며, 표준화된 방식으로 데이터를 주고받을 수 있습니다.
Representational State Transfer API
자원(resource)의 표현(representation)에 의한 상태 전달을 뜻한다.
- 자원 : 해당 소프트웨어가 관리하는 모든 것 ( 문서, 그림, 데이터, 해당 소프트웨어 자체 등 )
- 표현 : 그 자원을 표현하기 위한 이름 ( DB의 학생 정보가 자원이면, 'students'를 자원의 표현으로 정함 )
- 상태 전달 : 데이터가 요청되는 시점에 자원의 상태를 전달한다. ( JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적 )
클라이언트-서버 구조
무상태성 (Stateless)
캐싱 가능
통합된 인터페이스
계층 구조
HTTP 메소드는 REST API에서 리소스를 다루기 위해 사용됩니다. 주요 메소드는 다음과 같습니다:


GET /users
POST /users
PUT /users/1
DELETE /users/1

기본적으로 Restful API 설계 시 규칙은 다음과 같습니다.
의미를 바로 알아볼 수 있도록 작성하고, 소문자를 사용한다.
❌GET /users/writing
❌GET /users/Post-Comments
⭕GET /users/post-commentsURI가 길어지는 경우 언더바(_) 대신 하이픈(-)을 사용한다.
❌GET /users/profile_image
⭕GET /users/profile-image마지막에 슬래시(/)를 포함하지 않는다.
후행 슬래시(/)는 의미가 전혀 없고 혼란을 야기할 수 있다.
❌GET /users/
⭕GET /users리소스에 대한 행위를 HTTP Method로 표현한다.
- URI에 HTTP Method가 포함되서는 안된다.
❌get/users/
⭕GET /users/- resource는 동사가 포함되서는 안되고 명사를 사용한다.
❌GET /users/show/1
⭕GET /users/1파일 확장자는 URI에 포함시키지 않는다.
❌GET /users/photo.jpg
⭕GET /users/photo(이때, payload의 포맷은 headers에 accept를 사용한다.)URI 사이에 연관 관계가 있는 경우 /리소스/고유ID/관계 있는 리소스 순으로 작성한다.
❌GET /users/profile/{user_id}
⭕GET /users/{user_id}/profileURI에 작성되는 영어를 복수형으로 작성한다.
❌GET /product
⭕GET /productsURI는 / 구분자를 사용하여 자원의 계층 관계를 나타내는데 사용한다.
출처: CS | API, REST API, REST 설계 규칙 - happy tiger
URI 설계
/createUser 대신 /users)/users)HTTP 상태 코드

{
"id": 1,
"name": "John Doe"
}Spring Data JPA와 REST API 연동
Spring Data JPA를 사용하여 데이터베이스와 통신하고, REST API를 통해 클라이언트에 데이터를 제공합니다.
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
}
Swagger와 API 문서화
API 명세를 자동화하기 위해 Swagger를 사용합니다. 이를 통해 팀원들과 클라이언트가 API를 쉽게 이해할 수 있습니다.
보안 강화
| 항목 | REST API | SOAP |
|---|---|---|
| 설계 스타일 | REST (아키텍처 스타일) | 프로토콜 기반 |
| 데이터 포맷 | 주로 JSON | XML |
| 유연성 | 높음 | 낮음 |
| 사용 사례 | 웹 및 모바일 애플리케이션 | 금융, 결제 등 높은 신뢰성이 요구되는 시스템 |

내가 쓰려고 만든 RestfulAPI 설계 규칙 !
CS | API, REST API, REST 설계 규칙 - happy tiger
REST API란 무엇인가?
REST client
[HTTP] HTTP 응답 상태 코드 모음