API 공통사항
/name/src/main/java/com.springboot.api 하위에 controller 폴더 생성
controller 폴더 내부에 Controller 클래스 생성
@RestController와 @RequestMapping을 이용하여 내부에 선언되는 메서드에서 사용되는 공통 URL 설정
@RestController
@RequestMappint("api/v1/get-api")
public class GetController {
}
GET API
웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API
@RequestMapping 이용하기
어노테이션의 method 요소 값을 RequestMethod.GET으로 설정
(거의 사용하지 않는 방법)
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String getHello(){
return "Hello World";
}
@GetMapping 이용하기 (변수 없는)
@GetMapping(value = "/name")
public String getName() {
return "Flature";
}
@PathVariable을 이용해 변수가 있는 GET 메서드 구현
URL 자체에 값을 담아 요청한다.
{} 중괄호로 표시된 위치의 값을 받아 요청한다.
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable){
return variable;
}
.@GetMapping 어노테이션의 값으로 URL을 입력할 때 중괄호를 사용해 어느 위치에서 값을 받을지 결정해야 한다.
메서드의 매개 변수와 @PathVariable에 지정된 변수 이름이 동일해야 한다.
@PathVariable 뒤에 괄호를 열어 @GetMapping 어노테이션의 변수명을 지정한다.
@GetMapping(value = "/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var){
return var;
}
변수명을 동일하게 맞추기 어려운 경우 사용한다.
@RequestParam을 활용한 GET 메서드 구현
쿼리 형식으로 값을 전달한다.
'?'를 기준으로 우측에 '{키}={값}' 형태로 구성된 요청을 전송한다.
@GetMapping(value = "/request1")
public String getRequestParam1(
@RequestParam String name,
@RequestParam String email,
@RequestParam String organization){
return name + " " + email + " " + organization;
}
쿼리스트링에 어떤 값이 들어올지 모른다면 Map 객체를 활용한다.
@GetMapping(value = "/request2")
public String getRequestParam2(@RequestParam Map<String, String> param){
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
DTO 객체를 활용한 GET 메서드 구현
DTO는 다른레이어 간의 데이터 교환에 활용된다.
클래스 및 인터페이스를 호출하면서 전달하는 매개변수로 사용되는 데이터 객체다.
DTO 객체가 작성되는 파일은 com.springboot.api 패키지 하단에 dto 패키지 생성 후 그 안에 작성한다.
아래 코드는 DTO 클래스의 일부다.
DTO 클레스에는 전달하고자 하는 필드 객체를 선언하고 getter/setter 메서드를 구현한다.
public class MemberDto {
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
@Override
public String toString(){
return "MemberDto{"+
"name='" + name + '\'' +
", email='" + email + '\'' +
", organization='" + organization + '\'' + '}';
}
}
DTO 객체를 활용한 GET 메서드 코드다.
@GetMapping(value = "/request3")
public String getRequestParam3(MemberDto memberDto){
return memberDto.toString();
}
POST API
웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할 때 사용되는 API
POST API에서는 저장하고자 하는 리소스나 값을 HTTP BODY에 담아 서버에 전달한다.
GET API에 비해 URI가 간단하다.
@RequestBody를 활용한 POST 메서드 구현
@RequestBody는 HTTP의 Body 내용을 해당 어노테이션이 지정된 객체에 매핑한다.
Body 영역에 작성되는 값은 일반적으로 JSON 형식으로 전송된다.
위와 같이 요청을 통해 어떤 값이 들어오게 될 지 특정하기 어려운 경우 Map 객체를 사용한다.
@PostMapping(value = "/member")
public String postMember(@RequestBody Map<String, Object> postData){
StringBuilder sb = new StringBuilder();
postData.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
DTO 객체를 활용한 POST API 구현
요청 메시지에 들어갈 값이 정해져 있다면 DTO 객체를 매개변수로 삼아 작성할 수 있다.
@PostMapping(value = "/member2")
public String postMemberDto(@RequestBody MemberDto memberDto){
return memberDto.toString();
}
PUT API
웹 어플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이트하는 데 사용하는 API
POST API와 로직의 차이가 있지만 클래스 구현 방법은 유사하다.
마찬가지로 HTTP Body를 활용한다.
@RequestBody를 활용한 PUT 메서드 구현
POST 메서드와 동일하게 값을 HTTP Body에 담아 전달한다.
Map을 사용하는 경우도 동일하다.
@PutMapping(value = "/member")
public String postMember(@RequestBody Map<String, Object> putData){
StringBuilder sb = new StringBuilder();
putData.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
DTO 객체를 사용하는 경우도 동일하다.
@PutMapping(value = "/member1")
public String postMemberDto1(@RequestBody MemberDto memberDto){
return memberDto.toString();
}
@PutMapping(value = "/member2")
public MemberDto postMemberDto2(@RequestBody MemberDto memberDto){
return memberDto;
}
postMemberDto1()은 DTO 객체의 toString 메서드의 결과값인 string이 출력된다.
postMemberDto2()는 형식을 유지한 채 전달된 것으로 json이 출력된다.
ResponseEntity를 활용한 PUT 메서드 구현
ResponseEntity는 HttpEntity를 상속받은 클래스다.
서버에 들어온 요청에 대해 응답 데이터를 구성해서 전달할 수 있게 한다.
HttpEntity로부터 HttpHeaders와 Body를 가지고 자체적으로 HttpStatus를 구현한다.
HttpHeaders에는 요청, 응답에 대한 요구사항이 / Body에는 그 내용이 적혀있다.
@PutMapping(value = "/member3")
public ResponseEntity<MemberDto> postMemberDto3(@RequestBody MemberDto memberDto){
return ResponseEntity.status(HttpStatus.ACCEPTED).body(memberDto);
}
여기서 사용한 HttpStatus.ACCEPTD는 응답 코드 202를 가지고 있어 요청을 수행하면 응답 코드가 202로 변경된다.
DELETE API
웹 애플리케이션 서버를 거쳐 데이터베이스 등의 저장소에 있는 리소스를 삭제할 때 사용한다.
간단한 값을 받기 때문에 GET 메서드처럼 URI에 값을 넣어 요청을 받는 형식으로 구현된다.
@PathVariable을 활용한 DELETE 메서드 구현
@DeleteMapping(value = "/{variable}")
public String DeleteVariable(@PathVariable String variable){
return variable;
}
@RequestParam을 활용한 DELETE 메서드 구현
@DeleteMapping(value = "/request1")
public String getRequestParam1(@RequestParam String email){
return "e-mail : " + email;
}
'Backend > Server' 카테고리의 다른 글
[Kopring] 자바 MVC를 kopring MVC로 변환하기 (1) | 2024.01.04 |
---|---|
[Spring] MVC 모델 (0) | 2023.08.04 |
[Flask] 질문 목록과 상세 기능 (0) | 2023.07.31 |
[Flask] 데이터 처리하기 (DB) (2) (0) | 2023.07.31 |
[Flask] 데이터 처리하기 (DB) (1) (0) | 2023.07.27 |