POST API
리소스를 추가하기 위해 사용되는 API
일반적으로 추가하고자 하는 Resource를 http body에 추가하여 서버에 요청
따라서 @RequestBody를 이용하여 body에 담겨있는 값을 받아야 한다.
@PostMapping, @RequestBody
@PostMapping(value = "/default")
public String postMethod() {
return "Hello World";
}
// http://localhost:8080/api/v1/post-api/member
@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 사용
key와 value가 정해져 있지만, 받아야 할 파라미터가 많을 경우 DTO 객체를 사용
GetMapping에서는 DTO 객체를 사용할 때 @RequestBody를 붙이지 않아도 정상적으로 동작이 되나, POST API에서는 반드시 붙여야 값을 받을 수 있다.
// http://localhost:8080/api/v1/post-api/member2
@PostMapping(value = "/member2")
public String postMemberDto(@RequestBody MemberDTO memberDTO) {
return memberDTO.toString();
}
GET API
@RequestMapping
value와 method로 정의하여 API 개발하는 방식이다. 이제는 고전적인 방법으로 사용하지 않는 추세이다.
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "Hello World!";
}
@GetMapping (without Param)
@GetMapping("hello")
public String hello() {
return "Hello World!";
}
@PathVariable
Get 요청에서 파라미터를 전달하기 위해 URL에 값을 담아 요청하는 방법
아래 방식은 @GetMapping에서 사용된 {변수}의 이름과 메소드의 매개변수와 일치시켜야 함
@GetMapping(value="/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
return variable;
}
유지 보수의 관점에서 변수의 이름을 일치시키기 힘들때 다음과 같이 작성
@GetMapping(value="/variable2/{variable}")
public String getVariable2(@PathVariable("variable") String var) {
return var;
}
@RequestParam
쿼리 문자열을 전달하기 위해 사용되는 방법
http://localhost:8080/api1/v1/get-api/request1?name=square&email=squareyun@gmail.com&organization=itsquare
@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();
}
key와 value가 정해져 있지만, 받아야 할 파라미터가 많을 경우 DTO 객체를 사용한 방식
@GetMapping(value="/request3")
public String getRequestParam3(MemberDTO memberDTO) {
//return memberDTO.getName() + memberDTO.getEmail() + memberDTO.getOrganization();
return memberDTO.toString();
}
public class MemberDTO {
private String name;
private String email;
private String organization;
...
}
PUT API
해당 리소스가 존재하면 갱신하고, 없을 경우에는 새로 생성해주는 API이다. 즉 업데이트를 의미한다.
@RestController
@RequestMapping("/api/v1/put-api")
public class PutController {
// http://localhost:8080/api/v1/put-api/defalut
@PutMapping(value = "/defalut")
public String putMethod() {
return "Hello World!; ";
}
// http://localhost:8080/api/v1/put-api/member
@PutMapping(value = "/member")
public String putMember(@RequestBody Map<String, Object> putData) {
StringBuilder sb = new StringBuilder();
putData.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
// http://localhost:8080/api/v1/put-api/member1
@PutMapping(value = "/member1")
public String putMemberDto1(@RequestBody MemberDTO memberDTO) {
return memberDTO.toString();
}
// http://localhost:8080/api/v1/put-api/member2
@PutMapping(value = "/member2")
public MemberDTO putMemberDto2(@RequestBody MemberDTO memberDTO) {
return memberDTO; // json의 형태로 반환된다. 이 방식이 더 선호됨
}
// http://localhost:8080/api/v1/put-api/member3
@PutMapping(value = "/member3")
public ResponseEntity<MemberDTO> putMemberDto3(@RequestBody MemberDTO memberDTO) {
return ResponseEntity.status(HttpStatus.ACCEPTED).body(memberDTO); // 202 코드로 응답
}
}
ResponseEntity
putMemberDto3 메소드를 보면, ResponseEntity가 사용되었다.
이것은 Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스를 상속받아 사용하는 클래스로, 사용자의 HttpRequest에 대항 응답 데이터를 포함한다.
포함하는 클래스
- HttpStatus
- HttpHeaders
- HttpBody
왜 사용할까?
지금까지 봤던 Http 응답 코드는 400이라는 클라이언트 에러 코드, 200이라는 정상 코드가 있었지만, 이러한 Response 데이터를 디테일하게 설정할 때 사용한다.
위의 코드에서 사용한 HttpStatus.ACCEPTED는 202 코드이다. enum으로 구현되어 있는 것을 확인할 수 있다.
DELETE API
리소스를 삭제하기 위해 사용되는 API로, 일반적으로 @PathVariable을 통해 리소스 ID 등을 받아 처리한다.
@RestController
@RequestMapping("/api/v1/delete-api")
public class DeleteController {
// http://localhost:8080/api/v1/delete-api/delete/{String 값}
@DeleteMapping(value = "/delete/{variable}")
public String DeleteVariable(@PathVariable String variable) {
return variable;
}
}
Reference
어라운드허브 스튜디오 - AroundHub Studio
'Back > spring' 카테고리의 다른 글
스프링부트 프로퍼티 암호화 (with. Jasypt) (0) | 2022.03.01 |
---|---|
스프링부트 서비스 구조 (0) | 2022.02.28 |
Swagger 라이브러리 (0) | 2022.02.26 |
스프링 웹 개발 기초 (0) | 2021.06.26 |