dio
HTTP μμ² μ²λ¦¬ λ° μΈν°μ
ν°λ₯Ό μ§μνλ Dart μΈμ΄ κΈ°λ° λΌμ΄λΈλ¬λ¦¬
Flutterμμ Dioλ κ°λ ₯νκ³ μ μ°ν HTTP λ€νΈμνΉ λΌμ΄λΈλ¬λ¦¬μ
λλ€. Dioλ₯Ό μ¬μ©νλ©΄ HTTP μμ²μ μ½κ² λ§λ€κ³ μμ ν μ μμ΅λλ€. μ΄ λΌμ΄λΈλ¬λ¦¬λ GET, POST, PUT, DELETE λ±μ λͺ¨λ HTTP λ©μλλ₯Ό μ§μνλ©°, μΏ ν€ κ΄λ¦¬, νμΌ μ
λ‘λ λ° λ€μ΄λ‘λ, μμ² μ·¨μ, μμ² νμμμ λ±μ κ³ κΈ κΈ°λ₯λ μ 곡ν©λλ€.
μ£ΌμκΈ°λ₯
β’
HTTP μμ² μ²λ¦¬
β’
μΈν°μ
ν°
β’
μΏ ν€ κ΄λ¦¬
β’
νμΌ μ
λ‘λ λ° λ€μ΄λ‘λ
β’
μμ² μ·¨μ λ° νμμμ μ€μ
μμ‘΄μ±
Dart install λͺ λ Ήμ΄
dart pub add dio
Dart
볡μ¬
Flutter install λͺ λ Ήμ΄
flutter pub add dio
Dart
볡μ¬
pubspec.yaml
dependencies:
dio: ^5.8.0+1
Dart
볡μ¬
import
import 'package:dio/dio.dart';
Dart
볡μ¬
κΈ°λ³Έ μμμ½λ
import 'package:dio/dio.dart';
void fetchData() async {
Dio dio = Dio();
try {
Response response = await dio.get('https://api.example.com/data');
print(response.data);
} catch (error) {
print('Error: $error');
}
}
Dart
볡μ¬
dio μ£Όμ λ©μλ
λ©μλ
κΈ°λ₯ | μ£Όμ λ©μλ |
GET | dio.get(url, {options, cancelToken, onReceiveProgress}) |
POST | dio.post(url, data, {options, cancelToken, onSendProgress, onReceiveProgress}) |
PUT | dio.put(url, data, {options, cancelToken, onSendProgress, onReceiveProgress}) |
DELETE | dio.delete(url, {data, options, cancelToken}) |
λ©μλ μΈμ(parameters)
μμ± | μ€λͺ
|
data | POST λ° PUT μμ²μμ μ μ‘ν λ°μ΄ν°λ₯Ό μ§μ |
options | μμ²μ λν λ€μν μ€μ μ ν¬ν¨νλ μ΅μ
κ°μ²΄ |
cancelToken | μμ²μ μ·¨μν λ μ¬μ©λλ ν ν° |
onSendProgress | μ
λ‘λ μ§ν μν©μ μΆμ νλ μ½λ°± ν¨μ |
onReceiveProgress | λ€μ΄λ‘λ μ§ν μν©μ μΆμ νλ μ½λ°± ν¨μ |
μμ² λ©μλ λ³ μμμ½λ
β’
get()
β’
post()
β’
put()
β’
delete()
get()
import 'package:dio/dio.dart';
void fetchData() async {
Dio dio = Dio();
try {
Response response = await dio.get('https://api.example.com/data');
print(response.data);
} catch (error) {
print('Error: $error');
}
}
Dart
볡μ¬
post()
import 'package:dio/dio.dart';
void postData() async {
Dio dio = Dio();
Map<String, dynamic> data = {
'username': 'john_doe',
'email': 'john@example.com',
};
try {
Response response = await dio.post('https://api.example.com/users', data: data);
print(response.data);
} catch (error) {
print('Error: $error');
}
}
Dart
볡μ¬
put()
import 'package:dio/dio.dart';
void updateData() async {
Dio dio = Dio();
Map<String, dynamic> data = {
'username': 'john_doe_updated',
'email': 'john@example.com',
};
try {
Response response = await dio.put('https://api.example.com/users/1', data: data);
print(response.data);
} catch (error) {
print('Error: $error');
}
}
Dart
볡μ¬
delete()
import 'package:dio/dio.dart';
void deleteData() async {
Dio dio = Dio();
try {
Response response = await dio.delete('https://api.example.com/users/1');
print(response.data);
} catch (error) {
print('Error: $error');
}
}
Dart
볡μ¬
http vs dio
Dartμμ HTTP μμ²μ μνν λ http ν¨ν€μ§μ dio ν¨ν€μ§λ κ°μ₯ λ§μ΄ μ¬μ©λλ λΌμ΄λΈλ¬λ¦¬μ
λλ€. κ°κ°μ μ°¨μ΄μ μ νλ‘ μ λ¦¬ν΄ λ³΄κ² μ΅λλ€.
http vs dio λΉκ΅ ν
νλͺ© | http ν¨ν€μ§ | dio ν¨ν€μ§ |
μ€μΉ | dart pub add http | dart pub add dio |
μ¬μ© λ°©μ | κΈ°λ³Έμ μΈ HTTP μμ² μ§μ | κ°λ ₯ν κΈ°λ₯μ κ°μΆ HTTP ν΄λΌμ΄μΈνΈ |
JSON λ³ν | μλμΌλ‘ jsonDecode() μ¬μ© | μλμΌλ‘ JSON λ³ν μ§μ |
μμ²/μλ΅ μΈν°μ
ν° | μμ | μμ²/μλ΅ μΈν°μ
ν° μ§μ |
νμμμ μ€μ | μμ | connectTimeout, receiveTimeout μ 곡 |
FormData μ§μ | multipart λ°©μ μ¬μ© | FormData ν΄λμ€ μ 곡 |
νμΌ μ
λ‘λ | μ§μ multipart/form-data ꡬν | FormDataμ onSendProgress μ§μ |
μ€νΈλ¦Ό μ§μ | http.StreamedRequest μ¬μ© | κΈ°λ³Έμ μΌλ‘ μ€νΈλ¦Όμ μ§μ |
μ·¨μ κΈ°λ₯ | μ§μνμ§ μμ | CancelTokenμ μ¬μ©ν΄ μμ² μ·¨μ κ°λ₯ |
μλ¬ μ²λ¦¬ | λ¨μν try-catch μ¬μ© | μμΈν μμΈ λ° μλ¬ νΈλ€λ§ μ§μ |
μ΄λ€ κ²½μ°μ μ¬μ©ν΄μΌ ν κΉ?
β’
http ν¨ν€μ§
β¦
κ°λ¨ν REST API νΈμΆλ§ νμν κ²½μ°
β¦
ν¨ν€μ§ ν¬κΈ°λ₯Ό μ΅μνν΄μΌ νλ κ²½μ°
β’
dio ν¨ν€μ§
β¦
μΈν°μ
ν°, νμμμ, μμ² μ·¨μ, νμΌ μ
λ‘λ λ±μ΄ νμν κ²½μ°
β¦
JSON λ³νκ³Ό κ°μ νΈμ κΈ°λ₯μ νμ©νκ³ μΆμ κ²½μ°
httpλ κ°λ³κ³ κ°λ¨νμ§λ§, dioλ λ κ°λ ₯ν κΈ°λ₯μ μ 곡ν©λλ€. νλ‘μ νΈμ μꡬμ¬νμ λ°λΌ μ ννλ©΄ λ©λλ€! 