https://
www.google.com - 도메인
/search - 엔드포인트
?q=폴라리스&ie=UTF-8 - 쿼리스트링
쿼리스트링 - 주소에 변수를 담아 보낼 때 사용
?변수=값&변수=값&...
경로에서 매개변수를 받을 때의 표현식
변수 이름은 동일해야 함// controller @GetMapping("/emp/{employeeId}") public ModelAndView getEmpDetailPage(@PathVariable Integer employeeId){
- 쿼리스트링을 자바 변수로 받을 수 있다
- 꼭 필요한 값이 아니면 required = false
- 디폴트 값은 null, 지정하고 싶을 시 defaultValue = (디폴트 값)
- name = "firstName"은 생략 가능(변수명이 같을 때)
// controller public ModelAndView getEmpListPage(@RequestParam(name="firstName", required = false, defaultValue = "asdf") String firstName)```
List<EmployeesEntity> findByFirstNameContainingIgnoreCase(String firstName);
public List<ResEmpTableDTO> getSearchEmpTablePageData(String firstName){
if(firstName == null){
return ResEmpTableDTO.fromEntityList(employeesRepository.findAll());
} else {
return ResEmpTableDTO.fromEntityList(employeesRepository.findByFirstNameContainingIgnoreCase(firstName));
}
}
List<ResEmpTableDTO> resEmpTableDTOList = empService.getSearchEmpTablePageData(firstName);
이용자
- /emp 엔드포인트에 접속
- 조건 : firstName이 ne인 사람 검색
주소창
- /emp?firstName=ne
컨트롤러
- @GetMapping("/emp")
- @RequestParam : 쿼리스트링 -> 변수
- 서비스에 조건에 맞는 직원 리스트 요청
서비스
- 리포지토리에 조건에 맞는 직원Entity 요구
리포지토리
- 조건에 맞게 검색 후 서비스에 반환
서비스
- 반환된 리스트를 dto로 만들어 컨트롤러에 반환
컨트롤러
- /emp?firstName=ne의 결과 반환
: 전송 내용이 암호화되어 전달된다.
: 주소는 명사, 메소드는 동사
: 웹 기반의 클라이언트와 서버 사이에서 데이터를 효율적으로 교환하고 조작할 수 있도록 하는 것
: 웹 서비스를 개발할 때 REST 아키텍처 스타일을 따르면, 일관성과 확장성을 가진 클라이언트-서버 모델을 구현할 수 있으며, 웹 상에서 다양한 플랫폼과 기기에서 동작하는 클라이언트와 통신할 수 있다.
- 아키텍처 : 시스템의 구조를 설계하고 구성하는 원칙과 규칙의 집합
1. 자원 (Resources):
모든 자원은 고유한 식별자(URI)를 가지고 있으며, 이러한 자원들은 서버에 존재합니다. 예를 들면, 사용자, 상품, 주문과 같은 데이터가 자원이 될 수 있습니다.
2. 행위 (Actions):
클라이언트는 HTTP 메서드를 사용하여 자원을 조작합니다. 주요 HTTP 메서드로는 GET(조회), POST(생성), PUT(수정), DELETE(삭제) 등이 있습니다. 이러한 메서드들을 통해 자원에 대한 행위를 정의합니다.
3. 표현 (Representation):
서버는 클라이언트에게 JSON, XML 등과 같은 데이터 형식으로 자원을 제공합니다. 클라이언트는 이러한 표현을 이해하고 처리할 수 있어야 합니다.
4. 상태 없음 (Stateless):
REST 아키텍처는 상태를 관리하지 않습니다. 클라이언트의 모든 요청은 독립적으로 처리되며, 이전 요청과 관련된 정보가 서버에 저장되지 않습니다. 이로 인해 서버의 확장성과 성능이 향상됩니다.
5. 계층화 (Layered System):
클라이언트는 서버와 직접 통신하며 중간에 프록시 서버나 캐시 등을 이용하여 서버의 구현을 추상화할 수 있습니다.
- RESTful한 웹 서비스를 개발하기 위해 제공되는 인터페이스
- 클라이언트와 서버 간의 통신을 위한 규칙과 규약을 제공,
데이터에 대한 CRUD작업을 HTTP 메서드(GET, POST, PUT, DELETE)를 이용하여 수행- URI*를 사용하여 데이터를 식별, 클라이언트는 URI로 서버의 데이터에 접근
ex) 사용자 정보를 조회하기 위한 REST API 엔드포인트는 "/users"이며, HTTP GET 메서드를 사용하여 해당 엔드포인트로 요청을 보내면 사용자 정보를 얻을 수 있
URI
출력을 화면이 아닌 데이터로
-> @ResponseBody + @Contorller = @RestController
package com.example.hr1.domain.main.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.example.hr1.domain.main.dto.ResMainDTO;
import com.example.hr1.domain.main.service.MainService;
// @Controller
// @ResponseBody
@RestController
public class MainControllerApiV1 {
@Autowired
private MainService mainService;
@GetMapping("/api/v1/main")
public List<ResMainDTO> getMainData(){
// hr 데이터베이스의 region 리스트 불러오는 함수
return mainService.getMainPageData();
}
}
- REST 아키텍처 스타일을 준수하여 애플리케이션을 개발하는 것
- REST 원칙을 적용하여 자원을 표현하고, HTTP 메서드를 활용하여 자원 관리
- REST API를 따르는 것을 포함하며, 자원과 자원 간의 관계를 잘 설계하여 일관성과 가독성을 높이는 것이 목표
ex) RESTful하게 프로그래밍한 애플리케이션은 URI 구성에 명사와 동사를 적절히 사용하고, HTTP 메서드를 적절한 의미에 맞게 사용하여 리소스를 관리
많은 도움이 되었습니다, 감사합니다.