바이솔 2024. 7. 22. 16:38

1. API란 무엇인가?

API는 "Application Programming Interface"의 약자이다. 이는 소프트웨어 애플리케이션 간의 상호작용을 가능하게 하는 규칙과 프로토콜의 집합이다. API는 애플리케이션이 서로 데이터를 주고받고, 기능을 사용할 수 있도록 한다.

2. REST란 무엇인가?

REST는 "Representational State Transfer"의 약자이다. REST는 네트워크 상에서 자원을 정의하고 접근하는 방식을 규정한 아키텍처 스타일이다. REST는 주로 HTTP를 통해 자원을 주고받는 데 사용된다.

3. REST API란 무엇인가?

REST API는 RESTful 원칙을 따르는 API이다. 이는 클라이언트와 서버 간의 통신을 위한 인터페이스를 제공하며, HTTP 요청을 통해 데이터를 주고받는다. REST API는 다음과 같은 특징을 가진다:

  • 무상태성 (Stateless): 각 요청은 독립적이며, 서버는 이전 요청의 상태를 저장하지 않는다. 클라이언트는 필요한 모든 정보를 요청에 포함시켜야 한다.
  • 클라이언트-서버 구조 (Client-Server Architecture): 클라이언트와 서버는 명확하게 분리되어 있으며, 클라이언트는 사용자 인터페이스를 관리하고, 서버는 데이터 저장 및 비즈니스 로직을 처리한다.
  • 캐시 가능성 (Cacheable): 응답 데이터는 캐시될 수 있으며, 이를 통해 성능을 향상시킬 수 있다.
  • 계층화 시스템 (Layered System): 클라이언트는 중간 서버(프록시, 게이트웨이 등)를 통해 서버에 접근할 수 있으며, 각 계층은 독립적으로 동작한다.

4. REST API의 구성 요소

4.1 자원 (Resources)

자원은 데이터베이스의 개체 또는 서비스의 기능 등을 의미한다. 각 자원은 URI(Uniform Resource Identifier)를 통해 식별된다.

예:

  • /users (사용자 목록)
  • /users/123 (특정 사용자)

4.2 URL과 URI

  • URI (Uniform Resource Identifier): URI는 인터넷 상의 자원을 식별하는 문자열이다. URI는 URL과 URN으로 나눌 수 있다.
  • URL (Uniform Resource Locator): URL은 자원의 위치를 나타내는 URI의 한 형태이다. 

URI는 자원을 식별하는 모든 식별자를 의미하고, URL은 그 자원의 구체적인 위치를 가리키는 식별자이다.

5. REST API의 구성 요소 (계속)

4.3 HTTP 메서드 (HTTP Methods)

HTTP 메서드는 자원에 대한 작업을 정의한다. 주요 HTTP 메서드는 다음과 같다:

  • GET: 자원의 조회
  • POST: 새로운 자원의 생성
  • PUT: 기존 자원의 갱신
  • DELETE: 자원의 삭제

4.4 상태 코드 (Status Codes)

서버는 클라이언트의 요청에 대한 응답으로 상태 코드를 반환한다. 이는 요청의 성공 여부와 결과를 나타낸다.

  • 200 OK: 요청 성공
  • 201 Created: 새로운 자원 생성 성공
  • 400 Bad Request: 잘못된 요청
  • 404 Not Found: 자원 찾을 수 없음
  • 500 Internal Server Error: 서버 내부 오류

6. REST API의 예제

5.1 사용자 생성 (POST 요청)

클라이언트가 새로운 사용자를 생성하기 위해 서버에 요청을 보낸다.

POST /users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 34

{
  "name": "John Doe",
  "email": "john.doe@example.com"
}

5.2 사용자 조회 (GET 요청)

클라이언트가 특정 사용자의 정보를 조회하기 위해 서버에 요청을 보낸다.

GET /users/123 HTTP/1.1
Host: example.com

5.3 사용자 갱신 (PUT 요청)

클라이언트가 특정 사용자의 정보를 갱신하기 위해 서버에 요청을 보낸다.

PUT /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 35

{
  "name": "Jane Doe",
  "email": "jane.doe@example.com"
}

5.4 사용자 삭제 (DELETE 요청)

클라이언트가 특정 사용자를 삭제하기 위해 서버에 요청을 보낸다.

DELETE /users/123 HTTP/1.1
Host: example.com

7. REST API의 장점

  • 확장성 (Scalability): REST API는 클라이언트와 서버의 역할을 명확히 분리하여, 시스템 확장이 용이하다.
  • 유연성 (Flexibility): REST API는 다양한 포맷(JSON, XML 등)을 지원하여, 여러 종류의 클라이언트와 쉽게 통합될 수 있다.
  • 유지보수성 (Maintainability): REST API는 표준화된 HTTP 프로토콜을 사용하여, 유지보수가 용이하다.

8. 오픈웨더(OpenWeather) API 사용 예제

8.1Java 코드 예제

다음은 오픈웨더 API를 사용하여 특정 도시의 날씨 정보를 가져오는 Java 코드 예제이다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class OpenWeatherAPIExample {
    public static void main(String[] args) {
        String apiKey = "YOUR_API_KEY"; // 발급받은 API 키
        String city = "Seoul"; // 조회할 도시
        String urlString = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + apiKey;

        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            int responseCode = connection.getResponseCode();
            if (responseCode == 200) { // HTTP OK
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String inputLine;
                StringBuffer content = new StringBuffer();

                while ((inputLine = in.readLine()) != null) {
                    content.append(inputLine);
                }
                in.close();

                // 응답 데이터 출력
                System.out.println("Response: " + content.toString());
            } else {
                System.out.println("GET request failed. Response Code: " + responseCode);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

코드 설명

  1. API 키와 도시 설정발급받은 API 키와 조회할 도시 이름을 설정한다.
  2. String apiKey = "YOUR_API_KEY"; // 발급받은 API 키 String city = "Seoul"; // 조회할 도시
  3. URL 생성API 요청을 위한 URL을 생성한다. 이 URL은 오픈웨더의 날씨 데이터를 요청한다.
  4. String urlString = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + apiKey;
  5. HTTP 연결 설정 및 요청URL 객체를 생성하고, HTTP 연결을 설정한 후 GET 요청을 보낸다.
  6. URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET");
  7. 응답 코드 확인 및 데이터 읽기응답 코드를 확인하고, HTTP 상태 코드가 200(OK)일 경우 응답 데이터를 읽어들인다. 응답 데이터를 출력한다.