HTTP 프로토콜을 기반으로 자원을 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 자원에 대한 상호 작용을 수행
REST API의 핵심은 자원(데이터 또는 서비스)을 고유하게 식별하는 이며 각 자원은 고유한 URI(Uniform Resource Identifier)를 가짐
- GET: 자원을 조회하거나 가져올 때 사용
- POST: 새로운 자원을 생성하거나 데이터를 제출할 때 사용
- PUT: 자원을 업데이트 또는 수정할 때 사용
- DELETE: 자원을 삭제할 때 사용
REST API는 상태 정보를 전달하지 않으며, 각 요청은 모든 필요한 정보를 포함해야 함
서버와 클라이언트 간의 상태를 공유하지 않고 통신할 수 있음
JAX-RS(Java API for RESTful Web Services) 예제
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Path("/books")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class BookResource {
private static Map<Integer, Book> books = new HashMap<>();
private static int nextId = 1;
// GET 메서드 - 모든 책 목록 조회
@GET
public List<Book> getAllBooks() {
return new ArrayList<>(books.values());
}
// GET 메서드 - 특정 ID의 책 조회
@GET
@Path("/{id}")
public Response getBook(@PathParam("id") int id) {
Book book = books.get(id);
if (book != null) {
return Response.ok(book).build();
} else {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
// POST 메서드 - 새로운 책 추가
@POST
public Response addBook(Book book) {
book.setId(nextId++);
books.put(book.getId(), book);
return Response.status(Response.Status.CREATED).entity(book).build();
}
// PUT 메서드 - 책 정보 수정
@PUT
@Path("/{id}")
public Response updateBook(@PathParam("id") int id, Book updatedBook) {
Book existingBook = books.get(id);
if (existingBook != null) {
existingBook.setTitle(updatedBook.getTitle());
existingBook.setAuthor(updatedBook.getAuthor());
return Response.ok(existingBook).build();
} else {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
// DELETE 메서드 - 책 삭제
@DELETE
@Path("/{id}")
public Response deleteBook(@PathParam("id") int id) {
Book removedBook = books.remove(id);
if (removedBook != null) {
return Response.ok().build();
} else {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
public static void main(String[] args) {
// 간단한 테스트 코드
BookResource resource = new BookResource();
// 책 추가
Book book1 = new Book("Book 1", "Author 1");
resource.addBook(book1);
// 모든 책 목록 조회
List<Book> allBooks = resource.getAllBooks();
System.out.println("All Books: " + allBooks);
// 특정 책 조회
Response response = resource.getBook(1);
System.out.println("Book 1: " + response.getEntity());
// 책 수정
Book updatedBook = new Book("Updated Book 1", "Updated Author 1");
resource.updateBook(1, updatedBook);
// 책 삭제
resource.deleteBook(1);
}
}
Spring Boot 예제
<!-- pom.xml -->
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
public String getUsers() {
// 사용자 목록 조회 로직...
return "Get users";
}
@PostMapping
public String createUser(@RequestBody User user) {
// 새로운 사용자 생성 로직...
return "Create user: " + user.getName();
}
@PutMapping("/{id}")
public String updateUser(@PathVariable("id") int id, @RequestBody User updatedUser) {
// 기존 사용자 정보 업데이트 로직...
return "Update user with ID: " + id;
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable("id") int id) {
// 사용자 삭제 로직...
return "Delete user with ID: " + id;
}
}
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
http://localhost:8080/users 에 접속하면 GET 요청 결과가 출력되며,
Postman과 같은 도구를 이용하여 다른 HTTP 메소드(GET/POST/PUT/DELETE 등)와 함께 해당 URL을 호출
'learn > web services' 카테고리의 다른 글
Java Web Service AP (0) | 2023.09.22 |
---|---|
SOAP (Simple Object Access Protocol) (0) | 2023.09.22 |