learn/web services

REST API (Representational State Transfer API)

사겅이 2023. 9. 22. 04:21

출처 : https://phpenthusiast.com/blog/what-is-rest-api

 

 

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