ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • API
    [공부] 프로그래밍/프로그래밍의 기초 2024. 3. 13. 13:18

     

    API
    API(응용 프로그램 프로그래밍 인터페이스)란 소프트웨어끼리 손쉽게 소통할 수 있도록 도와주는 도구입니다.

    예를 들어 당신이 레스토랑에 있다고 상상해보세요.당신은 손님이고 음식을 주문하고 싶어합니다. 웨이터는 당신과 주방 사이의 중개자 역할을 합니다. 당신은 주방이 음식을 준비하는 방법을 알 필요가 없습니다. 단지 주문을 웨이터에게 전달하면 됩니다.

    이 비유에서:
    당신은 클라이언트 애플리케이션입니다.주방은 서버 또는 기능을 제공하는 서비스입니다.웨이터는 API입니다.
    주문(요청)을 받고 주방에 전달하며 준비된 음식(응답)을 다시 가져와서 당신에게 제공합니다.
    API(웨이터)는 음식이 어떻게 준비되는지 모든 세부 사항을 이해하지 않고도 주방(서버)과 상호 작용할 수 있는 구조화된 방법을 제공하여 프로세스를 간소화합니다.

    마찬가지로 소프트웨어에서 API는 상호 작용을 위한 규칙과 프로토콜을 정의하여 다른 애플리케이션 또는 서비스 간의 통신을 용이하게 합니다.

    • API 엔드포인트 : API가 요청을 받고 응답을 보내는 특정 URL 또는 주소입니다.
    • HTTP : 인터넷에서 데이터를 전송하는 데 사용되는 프로토콜입니다. HTTP는 웹 브라우저와 웹 서버 간에 텍스트, 이미지, 비디오 등의 리소스를 주고받을 수 있게 해줍니다. 클라이언트인 웹 브라우저는 HTTP를 사용하여 웹 서버에 요청을 보내고, 서버는 해당 요청에 대한 응답을 다시 보냅니다. 이러한 요청과 응답은 일반적으로 HTML, CSS, JavaScript와 같은 웹 페이지를 구성하는 데 사용되며, 이러한 요청과 응답은 HTTP 헤더라는 형식을 따릅니다. HTTP는 웹의 기본적인 통신 프로토콜로 널리 사용되며, 클라이언트와 서버 간의 상호 작용을 가능하게 합니다.

      GET - 서버에서 정보를 받아옴 
      POST - 데이터베이스에 새로운 객체 생성, 요청 본문에 필드가 필요함 
      PUT - 데이터베이스에서 특정 객체를 완전히 교체함 
      PATCH - 특정 객체의 일부 필드만 업데이트함 
      DELETE - 데이터베이스에서 객체를 삭제함

    • REST (Representational State Transfer) : 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처 스타일을 말합니다. REST API는 REST 아키텍처 원칙을 준수하여 디자인된 API를 가리키며, RESTful API라는 용어는 이러한 REST API가 REST 아키텍처의 원칙을 잘 따르고 있는 상태를 강조하는 용어입니다.

    예제 만들기
    작업 엔티티: 이는 작업 객체를 나타내며 데이터베이스에 매핑됩니다.
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    @Entity
    public class Task {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
        private boolean completed;
    
        // Getter 및 Setter
    }

     

    작업 리포지토리: 이 인터페이스는 작업 엔티티에 대한 CRUD 작업을 수행하기 위해 JpaRepository를 확장합니다.
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface TaskRepository extends JpaRepository<Task, Long> {
    }

     

    작업 컨트롤러: 이것은 HTTP 요청을 처리하는 진입점입니다.
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @RestController
    @RequestMapping("/api/tasks")
    public class TaskController {
        @Autowired
        private TaskRepository taskRepository;
    
        @GetMapping
        public List<Task> getAllTasks() {
            return taskRepository.findAll();
        }
    
        @PostMapping
        public ResponseEntity<Task> createTask(@RequestBody Task task) {
            Task savedTask = taskRepository.save(task);
            return new ResponseEntity<>(savedTask, HttpStatus.CREATED);
        }
    
        @PutMapping("/{id}")
        public ResponseEntity<Task> updateTask(@PathVariable Long id, @RequestBody Task taskDetails) {
            Task task = taskRepository.findById(id)
                    .orElseThrow(() -> new ResourceNotFoundException("Task not found with id " + id));
    
            task.setName(taskDetails.getName());
            task.setCompleted(taskDetails.isCompleted());
            Task updatedTask = taskRepository.save(task);
            return ResponseEntity.ok(updatedTask);
        }
    
        @DeleteMapping("/{id}")
        public ResponseEntity<Void> deleteTask(@PathVariable Long id) {
            Task task = taskRepository.findById(id)
                    .orElseThrow(() -> new ResourceNotFoundException("Task not found with id " + id));
    
            taskRepository.delete(task);
            return ResponseEntity.noContent().build();
        }
    }

     

    예외 핸들러: 이것은 적절한 오류 응답을 반환하기 위한 사용자 지정 예외 핸들러입니다.
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.*;
    
    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(ResourceNotFoundException.class)
        @ResponseStatus(HttpStatus.NOT_FOUND)
        public ResponseEntity<Object> handleResourceNotFoundException(ResourceNotFoundException ex) {
            return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
        }
    }

     

    ResourceNotFoundException: 리소스를 찾을 수 없는 오류에 대한 사용자 지정 예외 클래스입니다.
    public class ResourceNotFoundException extends RuntimeException {
        public ResourceNotFoundException(String message) {
            super(message);
        }
    }

     

    '[공부] 프로그래밍 > 프로그래밍의 기초' 카테고리의 다른 글

    매핑  (1) 2024.04.18
    비동기 처리  (0) 2024.04.10
    thread  (1) 2024.04.10
    클러스터  (0) 2024.03.12
    [Spring Boot] IoC 와 DI  (1) 2024.03.08
Designed by Tistory.