728x90
REST API
- REST + API 합친 용어
- REST 아키텍처의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스
- 최근 많은 API가 REST API로 제공되고 있다.
- 일반적으로 REST 아키텍처를 구현하는 웹 서비스를 RESTful 하다고 표현
API
- API(Application Programming Interface): 응용프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스
// 인터페이스: 어떤 장치간 정보를 교환하기 위한 수단이나 방법 - API를 사용하면 내부 구현 로직을 알지 못해도 정의되어있는 기능을 쉽게 사용가능
REST
- REST(Representational State Transfer): 서버와 클라이언트의 통신 방식 중 하나. 자원의 이름으로 구분하여 해당 자원의 상태를 교환함.
- HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 자원을 교환. http 통신을 한다.
// HTTP Method: Create, Read, Update, Delete
REST 특징
- Server-Client 구조
- 자원이 있는 쪽이 server, 요청하는 쪽이 client
- 클라이언트와 서버가 독립적으로 분리되어 있어야함(자원 공유 x) - 무상태성(Stateless)
- 요청 간에 클라이언트 정보가 서버에 저장되지 않음
- 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리 - 캐시 처리 가능(Cacheable)
- HTTP 프로토콜을 그대로 사용 -> HTTP의 특징인 캐싱 기능을 적용
- 대량의 요청을 효율적으로 처리하기 위해 캐시 사용 - 계층형 구조
- 클라이언트는 서버의 구성과 상간 없이 REST API 서버로 요청
- 서버는 다중 계층으로 구성될 수 있다.(로드밸런싱, 보안 요소, 캐시 등)
// 서버가 변경되어도 클라이언트는 상관 x - Code on Demand(Optional)
- 요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트(로직)을 전달하여 클라이언트 기능을 확장함 - 인터페이스 일관성
- 정보가 표준 형식으로 전송되기 위해 구성 요소간 통합 인터페이스를 제공한다
- HTTP 프로토콜 따르는 모든 플랫폼에서 사용 가능하게 설계
REST API 장점
- REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높임
- HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현가능
- HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환 가능
- 서버와 클라이언트의 역할을 명확하게 분리
- 여러 서비스 설계에서 생길 수 있는 문제를 최소화
// rest 사용하는 http 통신으로만 진행하니까
REST API 설계 규칙
- 웹 기반의 REST API를 설계하는 경우에는 URI를 통해 자원을 표현해야함
- https://exam.com/member/589 - 자원에 대한 조작은 HTTP Method(CRUD)를 통해 표현해야함
- URI에 행위가 들어가면 안된다.
- HEADER를 통해 CRUD를 표현하여 동작을 요청 - 메세지를 통한 리소스 조작
- HEADER를 통해 content-type 을 지정하여 데이터를 전달
- 대표적 형식: HTML, XML, JSON, TEXT - URI에는 소문자를 사용
- Resource의 이름이가 URI가 길어질 경우 하이픈(-)을 통해 가독성을 높일 수 있다.
- 언더바(_)는 사용하지 않음
- 파일 확장자를 표현하지 않음
더 알아보기: REST API란? (velog.io)
SpringBoot에서 REST API 작성하기
GET API
@RestController
@RequestMapping("/api/get-api")
public class GetController {
// https://localhost:8080/api/get-api/hello
@GetMapping(value = "/hello")
public String getHello() {
return "hello";
}
}
- 쿼리 없는 예제
@GetMapping(value = "/variable/{variable}")
public String getVariable(@PathVariable String variable) {
return "hello " + variable;
}
@GetMapping(value = "/request1")
public String getRequestParam1 (
@RequestParam String name,
@RequestParam String email,
@RequestParam String organization) {
return name + " " + email + " " + organization;
}
- PathVariable 예제
- url의 쿼리로 들어온 값 활용 시 사용
@GetMapping(value = "/request3")
public String getRequestParam3(MemberDTO memberDTO) {
return memberDTO.toString();}
}
- DTO 사용
POST API
@PostMapping(value = "/member2")
public String postMemberDto(@RequestBody MemberDTO memberDTO) {
return memberDTO.toString();
}
- 인자로 memberDTO를 받아서 toString으로 넘겨준다
Put API
@PutMapping(value = "/member2")
public MemberDTO postMemberDto2(@RequestBody MemberDTO memberDTO) {
return memberDTO;
}
DELETE API
@DeleteMapping(value = "/delete/{variable}")
public String DeleteVariable(@PathVariable String variable) {return variable;}
- 테스트용 예제여서 간단하게 return을 해주었다
참고:
https://www.youtube.com/watch?v=lceS3HbGXt4&list=PLlTylS8uB2fBOi6uzvMpojFrNe7sRmlzU&index=4
728x90
'CS' 카테고리의 다른 글
API vs Library vs Framework (0) | 2023.11.27 |
---|---|
토큰 이코노미 시대? NFT가 뭘까? (0) | 2023.09.09 |
빅데이터란? (1) | 2023.09.07 |
보일러플레이트 코드란?(Boilerplate code) (0) | 2023.06.21 |
SOLID: 객체지향 5대 원리 (2) | 2023.01.27 |