درک درخواستهای HTTP و کار با APIها در فلاتر
امروزه اکثر اپلیکیشنها نیازمند ارتباط با سرور یا منابع خارجی از طریق API هستند. این ارتباط معمولاً با استفاده از پروتکل HTTP انجام میشود. در این مقاله، به بررسی نحوه مدیریت درخواستهای HTTP و کار با APIها در فلاتر خواهیم پرداخت.
مقدمهای بر درخواستهای HTTP
پروتکل HTTP اساس ارتباطات وب است که برای انتقال داده بین کلاینت (مانند اپلیکیشن موبایل) و سرور استفاده میشود. چهار نوع رایج درخواست HTTP عبارتاند از:
- GET: دریافت اطلاعات از سرور.
- POST: ارسال داده به سرور.
- PUT: بهروزرسانی داده موجود.
- DELETE: حذف داده از سرور.
هر کدام از این متدها کاربرد خاص خود را دارند و باید متناسب با نیاز پروژه انتخاب شوند.
ابزارهای مدیریت درخواست HTTP در فلاتر
برای ارسال درخواستهای HTTP، کتابخانه http
یکی از گزینههای محبوب است. همچنین کتابخانه dio
امکانات پیشرفتهای مانند مدیریت Timeout، Request Interceptor، و Response Transformation ارائه میدهد.
نصب کتابخانه http
dependencies:
http: ^0.15.0
پس از اضافه کردن این کتابخانه به فایل pubspec.yaml
، کافی است دستور flutter pub get
را اجرا کنید تا نصب شود.
ارسال یک درخواست GET ساده
import 'package:http/http.dart' as http;
import 'dart:convert';
Future fetchData() async {
final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
if (response.statusCode == 200) {
final data = json.decode(response.body);
print(data);
} else {
print('Failed to fetch data: ${response.statusCode}');
}
}
این کد یک درخواست GET ارسال کرده و پاسخ JSON را دریافت میکند.
ارسال یک درخواست POST
Future postData() async {
final response = await http.post(
Uri.parse('https://jsonplaceholder.typicode.com/posts'),
headers: {'Content-Type': 'application/json'},
body: json.encode({'title': 'Flutter', 'body': 'Learning HTTP', 'userId': 1}),
);
if (response.statusCode == 201) {
print('Data posted successfully: ${response.body}');
} else {
print('Failed to post data: ${response.statusCode}');
}
}
در این مثال، اطلاعات به شکل JSON به سرور ارسال شده است.
Error Handling و مدیریت Timeout
Error Handling بخش مهمی از کار با APIهاست. هنگام کار با شبکه ممکن است خطاهایی مانند قطع اتصال یا مشکلات سمت سرور رخ دهد. برای مدیریت بهتر خطاها میتوان از ساختار try-catch
استفاده کرد:
try {
final response = await http.get(Uri.parse('https://example.com'));
} catch (error) {
print('An error occurred: $error');
}
If timeout is a concern, the Dio
-library provides a robust way to handle it, allowing you to set specific timeouts for requests.