API(Application Programming Interface)

API: Application Programming Interface

이번에 Gemma Sprint를 하면서 백엔드 관련 작업을 할 일이 생겼다. 이에 가장 기본이 되는 API에 대해 공부해보고자 한다.

1. API란 무엇인가?

APIApplication Programming Interface의 약자로, 소프트웨어 애플리케이션 간의 상호 작용을 가능하게 하는 인터페이스를 의미한다. 쉽게 말해, 서로 다른 소프트웨어가 원활하게 통신하고 기능을 공유할 수 있도록 도와주는 중개자 역할.

  • 왜 API가 중요한가?

    • 재사용성: 기존의 기능을 재사용하여 개발 시간을 단축할 수 있음

    • 유연성: 서로 다른 시스템 간의 통합이 용이해짐

    • 확장성: 새로운 기능이나 서비스를 추가할 때 유연하게 대처할 수 있음

2. API의 종류

API는 사용 목적과 방식에 따라 여러 가지로 분류된다.

  • 웹 API: 웹 서버와 클라이언트 간의 통신을 위해 사용. 대표적으로 RESTful API와 SOAP API가 있음.
  • 운영체제 API: 운영체제가 제공하는 기능을 활용하기 위한 인터페이스. Windows API, Linux의 POSIX 등이 있음
  • 라이브러리 또는 프레임워크 API: 특정 라이브러리나 프레임워크에서 제공하는 기능을 사용하기 위한 인터페이스. jQuery API, React API 등이 있습니다.

이중에서도 내가 주로 사용해야 할 것은 RESTful API이다.

3. RESTful API의 이해

  • REST란 무엇인가?

    • REST(Representational State Transfer)는 웹의 장점을 최대한 활용할 수 있도록 설계된 소프트웨어 아키텍처 스타일. Roy Fielding이 2000년에 발표한 논문에서 처음 소개됨
  • REST의 원칙

    • 클라이언트-서버 구조: 클라이언트와 서버는 서로 독립적으로 발전할 수 있음

    • 무상태성(Stateless): 각 요청은 서로 독립적이며, 서버는 이전 요청 정보를 저장하지 않음

    • 캐시 처리 가능(Cacheable): HTTP 프로토콜을 사용하여 응답을 캐싱할 수 있음

    • 계층화 시스템(Layered System): 중간 서버를 통해 로드 밸런싱이나 캐싱을 구현할 수 있음

    • 일관된 인터페이스(Uniform Interface): API의 인터페이스가 일관되어야 함

    • 코드 온 디맨드(Code on Demand, 선택 사항): 서버에서 실행 가능한 코드를 클라이언트로 전송할 수 있음

  • HTTP 메서드의 활용: RESTful API에서는 HTTP 메서드를 활용하여 CRUD 작업을 수행함

    • GET: 리소스 조회

    • POST: 리소스 생성

    • PUT: 리소스 전체 수정

    • PATCH: 리소스 부분 수정

    • DELETE: 리소스 삭제

  • HTTP 상태 코드: 클라이언트에게 요청의 결과를 알려주기 위해 HTTP 상태 코드를 사용함

    • 200 OK: 성공적인 요청

    • 201 Created: 리소스 생성 성공

    • 400 Bad Request: 잘못된 요청

    • 401 Unauthorized: 인증 실패

    • 403 Forbidden: 접근 권한 없음

    • 404 Not Found: 리소스를 찾을 수 없음

    • 500 Internal Server Error: 서버 오류

  • RESTful API 디자인

    • 엔드포인트는 명사로: 엔드포인트는 리소스를 나타내므로 복수형 명사를 사용
1
2
GET /users        // 사용자 목록 조회
GET /users/1      // 특정 사용자 조회
  • 상태를 표현하지 않는 URI: URI에는 동사가 아닌 리소스를 나타내는 명사를 사용하고, 동작은 HTTP 메서드로 표현
  • 리소스 간 관계 표현: 하위 자원을 나타낼 때는 계층적인 URI를 사용
1
GET /users/1/posts    // 특정 사용자의 게시글 조회
  • 필터링과 정렬: 쿼리 파라미터를 사용하여 필터링과 정렬 기능을 제공
1
GET /products?category=books&sort=price_desc
  • 페이징 처리: 데이터가 많을 경우 페이징을 통해 효율성을 높임
1
GET /users?page=2&limit=50
  • 버전 관리: API의 변경 사항을 관리하기 위해 버전을 명시
1
GET /v1/users
  • 응답 데이터 포맷: 일반적으로 JSON 형식을 사용하며, Content-Type 헤더를 통해 명시

  • 보안

    • 인증(Authentication): 사용자의 신원을 확인합니다. 예를 들어, JWT 토큰이나 OAuth 사용.

    • 인가(Authorization): 사용자의 권한을 확인합니다.

    • HTTPS 사용: 데이터의 암호화를 위해 HTTPS 프로토콜을 사용합니다.