과제 4. API

수원 개발자·2024년 4월 5일

스진초_과제

목록 보기
4/12
post-thumbnail

과제

  1. API가 무엇인가요?
  2. 그럼 그 중에서도 REST API는 무엇인가요?

API란 데이터베이스나 서비스에 대해 요청이 들어오고 그것에 대해 상호작용하는 방법, 즉 상호작용을 위한 프로그래밍 인터페이스를 의미한다. 이를 통해 서버와 클라이언트는 서비스에 대해 기능을 수행할 수 있게 되고 애플리케이션은 외부에서 기능을 수행하기 위한 요소들을 가져올 수 있게 된다. API는 프로그래밍 인터페이스다. 그렇기 때문에 API를 사용하는 것은 주로 프로그램 내부 단에서 이루어진다. 그럼 이 중에서도 REST API라는 것이 있다. REST API는 어느정도 구성된 틀을 지키면서 API를 설계하라는 의미인데 이것을 지켜 RESTful한 API를 만드는 것이 중요하다고 생각한다. 물론 이것에만 의존해서 만들기보다는 최대한 이런 API를 설계하는 것이 중요하다는 의미다. 우리가 사용하는 모든 웹사이트는 아마 이런 REST API를 사용하고 있을 것이다. 이를 통해 각 회사의 웹사이트의 기능을 이용할 수 있다. 이를 설계할 때 중요한 것이 무엇일까?

  1. 자원
    만약 어떤 문서를 수정한다고 할 때, 주소창에 /edit/post1 이런 식으로 구성된 것을 자주 볼 수 있다. 이것이 아니더라도 /login, /delivery 이렇게 자원만 보더라도 어떤 기능을 할 수 있게 설계를 하는 것이 클라이언트나 개발자나 관리가 편하고 의미를 명확히 전달 할 수 있을 것이라고 생각한다.

  2. 메서드

  • POST
    자원 생성(Create)
  • GET
    자원 조회(Read)
  • PUT
    자원 수정(Update)
  • DELETE
    자원 삭제(Delete)
  1. 메세지
    응답 코드 500과 같이 올바른 HTTP 응답 코드를 반환함으로써 클라이언트에게 요청 결과를 명확하게 전달할 수 있다. 올바른 응답 코드를 제공하는 것은 API의 안정성, 신뢰성 및 사용자 경험에 중요하다.

이를 통해 HTTP 응답 코드는 클라이언트에게 요청이 성공적으로 처리되었는지, 오류가 발생했는지 또는 추가 작업이 필요한지에 대한 정보를 제공한다.
또한 올바른 응답 코드를 반환하여 클라이언트가 발생한 오류에 대해 적절히 대응할 수 있도록 돕는다. 예를 들어, 404 Not Found는 요청한 리소스가 존재하지 않음을 나타내므로 클라이언트는 이에 대해 적절히 처리할 수 있다.

아래는 필자가 강의를 듣고 작성한 코드다.

package com.example.demo.product;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class ProductController {
    // 사용자 요청을 던지면 그걸 받아서
    // 요청에 맞는 메소드를 실행시킨다.
    // 그 안에서, 그에 맞는 로직을 수행할 수 있도록 서비스한테 시킬 것이다.

    @Autowired
    private ProductService productService;

    // 상품 전체 조회
    @GetMapping("/products")
    public List<Product> findProductList() {
        return productService.findProductList();
    }

    // 개별 상품 조회
    @GetMapping("/products/{id}")
    public Product findProduct(@PathVariable("id") int id) {
        return productService.findProduct(id);
    }

    // 상품 등록
    @PostMapping("/products")
    public void saveProduct(@RequestBody Product product) {
        // @RequestParam : localhost:8080/products?name=____ -> productName
        productService.saveProduct(product);
    }


}

이처럼 GetMapping, PostMapping등을 통해 자원을 생성, 조회하고 자원에 대해 메서드명을 이해하기 쉽게 관련되게 짓고 이에 대해 올바른 반환 값을 주어 올바른 API를 만들어봤다!

0개의 댓글