2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

다트에서 REST API와 통신하는 방법은?

_____
Q1: 다트에서 REST API와 통신하려면 어떤 패키지를 사용하나요?
A1: 다트에서는 주로 `http` 패키지를 사용하여 REST API와 통신합니다. Flutter 프로젝트에서는 `http` 패키지가 가장 간단하고 널리 사용됩니다.

Q2: `http` 패키지를 프로젝트에 추가하는 방법은?
A2: `pubspec.yaml` 파일에 아래처럼 추가합니다.
```yaml
dependencies:
http: ^0.13.5
```
그리고 터미널에서 `flutter pub get` 또는 `dart pub get` 명령어를 실행해 패키지를 다운로드합니다.

Q3: GET 요청을 보내는 기본적인 방법은?
A3: 아래 예제처럼 `http.get` 함수를 사용합니다.
```dart
import 'package:http/http.dart' as http;

Future fetchData() async {
final response = await http.get(Uri.parse('https://api.example.com/data'));

if (response.statusCode == 200) {
print('Response body: ${response.body}');
} else {
print('Request failed with status: ${response.statusCode}');
}
}
```

Q4: POST 요청을 보내려면 어떻게 하나요?
A4: `http.post` 메서드에 URL과 함께 요청 본문을 JSON 형식으로 전달할 수 있습니다. 예:
```dart
import 'package:http/http.dart' as http;
import 'dart:convert';

Future postData() async {
final url = Uri.parse('https://api.example.com/create');
final headers = {'Content-Type': 'application/json'};
final body = jsonEncode({'name': 'John', 'age': 30});

final response = await http.post(url, headers: headers, body: body);

if (response.statusCode == 201) {
print('Resource created: ${response.body}');
} else {
print('Failed to create resource: ${response.statusCode}');
}
}
```

Q5: 서버에서 반환하는 JSON 데이터를 다트 객체로 변환하려면?
A5: `dart:convert` 패키지의 `jsonDecode` 함수를 사용해 JSON 문자열을 Map 또는 List로 변환하고, 이를 바탕으로 클래스를 만들어 매핑할 수 있습니다.
예:
```dart
import 'dart:convert';

void parseJson(String responseBody) {
final data = jsonDecode(responseBody);
print(data['name']); // 예: name 필드 접근
}
```

Q6: REST API 호출 시 예외 처리는 어떻게 하나요?
A6: 네트워크 오류, 서버 응답 오류 등을 `try-catch` 문으로 처리합니다.
```dart
try {
final response = await http.get(Uri.parse('https://api.example.com/data'));
if (response.statusCode == 200) {
// 데이터 처리
} else {
// 서버 오류 처리
}
} catch (e) {
print('Error occurred: $e');
}
```

Q7: 비동기 호출에서 응답 대기 시 주의할 점은?
A7: `await`를 사용하여 비동기 처리 결과를 기다려야 하며, 함수는 `async`로 선언되어야 합니다.
예:
```dart
Future fetchData() async {
final response = await http.get(...);
// 이후 코드
}
```

Q8: 다트 HTTP 요청 시 헤더를 추가하려면?
A8: `http.get` 또는 `http.post` 함수의 `headers` 파라미터에 Map 형태로 헤더를 전달합니다.
예:
```dart
final headers = {'Authorization': 'Bearer YOUR_TOKEN'};
final response = await http.get(url, headers: headers);
```

Q9: Multipart/form-data 방식으로 파일 업로드를 하려면?
A9: `http` 패키지 내 `MultipartRequest` 클래스를 사용합니다.
```dart
import 'package:http/http.dart' as http;
import 'dart:io';

Future uploadFile(File file) async {
var uri = Uri.parse('https://api.example.com/upload');
var request = http.MultipartRequest('POST', uri);
request.files.add(await http.MultipartFile.fromPath('file', file.path));
var response = await request.send();

if (response.statusCode == 200) {
print('Upload successful');
} else {
print('Upload failed');
}
}
```

Q10: REST API 호출을 효율적으로 관리하는 방법은?
A10: 별도의 서비스 클래스에 API 호출 로직을 모아 관리하고, 에러 처리 및 응답 파싱 로직을 통일하는 것이 좋습니다. 또한 `dio` 패키지 같은 고급 HTTP 클라이언트 라이브러리를 사용할 수도 있습니다.
다트(Dart)에서 REST API와 통신하는 방법은 여러 가지가 있지만, 가장 일반적인 방법은 `http` 패키지를 사용하는 것입니다.

이 패키지는 HTTP 요청을 보내고 응답을 받을 수 있는 간단하고 직관적인 방법을 제공합니다.

아래에서는 다트에서 REST API와 통신하는 방법을 단계별로 설명하겠습니다.

1. `http` 패키지 설치 먼저, `http` 패키지를 프로젝트에 추가해야 합니다.

`pubspec.yaml` 파일을 열고 다음과 같이 `dependencies` 섹션에 `http` 패키지를 추가합니다.

```yaml dependencies: http: ^0.13.3 ``` 그런 다음, 터미널에서 다음 명령어를 실행하여 패키지를 설치합니다.

```bash flutter pub get ```

2. HTTP 요청 보내기 이제 HTTP 요청을 보내는 방법을 살펴보겠습니다.

REST API와 통신하기 위해 GET, POST, PUT, DELETE 등의 요청을 사용할 수 있습니다.

아래는 각 요청 방법에 대한 예제입니다.

GET 요청 GET 요청은 서버에서 데이터를 가져오는 데 사용됩니다.

```dart import 'dart:convert'; import 'package:http/http.dart' as http; Future fetchData() async { final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts')); if (response.statusCode == 200) { // 요청이 성공적으로 완료되었을 때 List data = json.decode(response.body); print(data); } else { // 요청이 실패했을 때 throw Exception('Failed to load data'); } } ``` POST 요청 POST 요청은 서버에 데이터를 전송하는 데 사용됩니다.

```dart Future createData() async { final response = await http.post( Uri.parse('https://jsonplaceholder.typicode.com/posts'), headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode({ 'title': 'foo', 'body': 'bar', 'userId': '1', }), ); if (response.statusCode == 201) { // 요청이 성공적으로 완료되었을 때 print('Data created: ${response.body}'); } else { // 요청이 실패했을 때 throw Exception('Failed to create data'); } } ``` PUT 요청 PUT 요청은 서버의 기존 데이터를 업데이트하는 데 사용됩니다.

```dart Future updateData(int id) async { final response = await http.put( Uri.parse('https://jsonplaceholder.typicode.com/posts/$id'), headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode({ 'id': id.toString()(), 'title': 'updated title', 'body': 'updated body', 'userId': '1', }), ); if (response.statusCode == 200) { // 요청이 성공적으로 완료되었을 때 print('Data updated: ${response.body}'); } else { // 요청이 실패했을 때 throw Exception('Failed to update data'); } } ``` DELETE 요청 DELETE 요청은 서버에서 데이터를 삭제하는 데 사용됩니다.

```dart Future deleteData(int id) async { final response = await http.delete( Uri.parse('https://jsonplaceholder.typicode.com/posts/$id'), ); if (response.statusCode == 200) { // 요청이 성공적으로 완료되었을 때 print('Data deleted'); } else { // 요청이 실패했을 때 throw Exception('Failed to delete data'); } } ```

3. 에러 처리 HTTP 요청을 보낼 때는 항상 에러 처리를 고려해야 합니다.

위의 예제에서는 `statusCode`를 확인하여 요청이 성공했는지 확인하고, 실패한 경우 예외를 던지고 있습니다.

실제 애플리케이션에서는 이러한 예외를 적절히 처리하여 사용자에게 피드백을 제공해야 합니다.



4. 비동기 처리 Dart는 비동기 프로그래밍을 지원하므로, HTTP 요청을 보낼 때 `async`와 `await` 키워드를 사용하여 비동기적으로 작업을 수행할 수 있습니다.

이는 UI가 멈추지 않도록 하여 사용자 경험을 향상시킵니다.



5. JSON 데이터 처리 REST API와 통신할 때 JSON 형식의 데이터를 주고받는 경우가 많습니다.

Dart에서는 `dart:convert` 라이브러리를 사용하여 JSON 데이터를 쉽게 인코딩하고 디코딩할 수 있습니다.

위의 예제에서 `jsonEncode`와 `json.decode`를 사용하여 JSON 데이터를 처리하는 방법을 보여주었습니다.



6. Dart에서 REST API와 통신하는 것은 `http` 패키지를 사용하여 간단하게 구현할 수 있습니다.

GET, POST, PUT, DELETE 요청을 통해 데이터를 가져오고, 생성하고, 업데이트하고, 삭제할 수 있습니다.

비동기 처리를 통해 사용자 경험을 향상시키고, JSON 데이터를 쉽게 처리할 수 있는 방법을 제공하므로, RESTful API와의 통신을 효과적으로 수행할 수 있습니다.

작성자: 이준서 [비회원] | 작성일자: 1년 전 2024-09-19 01:52:43
조회수: 141 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.