سنتحدث في هذا المقال عن HTTP و DIO و GraphQL للعثور على أفضل Dart client لمشروعك. يتم مقارنة المزايا والعيوب وحالات الاستخدام لجعل خيارًا مدروسًا.
HTTP Package:
يحتوي Dart على حزمة مدمجة تسمى “http” للتعامل مع جميع احتياجات HTTP الخاصة بك.
مزايا HTTP:
- وفرها مطوري Dart.
- معيار للتفاعل بين العميل والخادم.
عيوب HTTP:
- توفر فقط الوظائف الأساسية. يجب تنفيذ الوظائف الإضافية بشكل مستقل.
- يتطلب كتابة وظائف إضافية لمعالجة الأخطاء.
كيفية استخدام HTTP:
أولاً، يجب إضافة الباكج التالية إلى ملف “pubspec.yaml”:
dependencies: http: ^0.13.5
ثم، يمكن تنفيذ الكود التالي باستخدام “http Package” كما هو موضح في الكود التالي:
import 'package:http/http.dart' as http; import 'dart:convert'; Future<void> main() async { final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/todos/1')); final Map<String, dynamic> data = jsonDecode(response.body); print(data['title']); }
“اقرأ أيضاً: شرح استخدام ويدجت Divider في فلاتر“
DIO Package:
“Dio” هو عميل HTTP قوي لـ Dart. يتميز بدعم المبرمجين والتكوين العام و FormData وإلغاء الطلب وتنزيل الملفات، بين أمور أخرى.
مزايا DIO:
- يوفر العديد من الميزات. بالإضافة إلى أداء المهام الشبكية الأساسية، يوفر “Dio” بعض الوظائف الإضافية مثل interceptors وسجل الأخطاء والتخزين المؤقت، وما إلى ذلك.
- يسمح بتنفيذ العميل بأسرع ما يمكن. لديه تجريدات إضافية تقلل من عدد الأكواد وتسرع عملية التطوير.
عيوب DIO:
- الأمان. نظرًا للعدد الكبير من الوظائف المقدمة، فإن احتمالية وجود خطأ في الحزمة أعلى.
كيفية استخدام DIO:
أولاً، يجب إضافة حزمة “Dio” إلى ملف “pubspec.yaml” الخاص بك:
dependencies: dio: ^4.0.6
الخطوة التالية هي تهيئة “Dio” كما يلي:
import 'package:dio/dio.dart'; void main() async { final dio = Dio(); final response = await dio.get('https://jsonplaceholder.typicode.com/todos/1'); print(response.data['title']); }
“اقرأ أيضاً: شرح استخدام ويدجت Expanded في فلاتر“
مقارنة http مع Dio
من خلال مقارنة حزمة http مع Dio، يغطي Dio معظم حالات الشبكات القياسية بجهد أدنى، في حين يوفر http وظائف أساسية فقط. لذا، في معظم المشاريع التي تتطلب سرعة التطوير، يكون Dio مثاليًا.
ولكن في المشاريع الكبيرة التي تتطلب الدعم لفترة طويلة، يفضل في بعض الأحيان اختيار http ومن ثم كتابة الأساليب الناقصة بنفسك، حيث أن Dio ليس من مطوري Dart.
إذا كنت لا تزال لا تعرف ماذا تختار، انظر إلى GraphQL.
“اقرأ أيضاً: شرح استخدام ويدجت AnimatedList في فلاتر“
GraphQL Package:
GraphQL هو لغة استعلام تم تطويرها من قبل Facebook وتتيح للعميل استعلام الخادم بدقة عن البيانات التي يريدها. يتميز GraphQL بأنه يتيح للعميل تحديد البيانات التي يحتاجها بشكل دقيق وبالتالي يقلل من حجم البيانات الزائدة التي يتم إرسالها.
مزايا GraphQL:
- يوفر قدرًا كبيرًا من المرونة والتحكم في استرداد البيانات.
- يوفر عملية استعلام واحدة لجميع الاحتياجات، وبالتالي يقلل من عدد الاستعلامات اللازمة للحصول على البيانات.
عيوب GraphQL:
- يتطلب تعلم لغة GraphQL وكيفية استخدامها.
- يتطلب تكوين خادم GraphQL ليكون قادرًا على تلبية استعلامات العميل.
كيفية استخدام GraphQL:
أولاً، يجب إضافة حزمة “graphql” إلى ملف “pubspec.yaml” الخاص بك:
dependencies: graphql: ^4.0.0
ثم، يمكن استخدام “graphql” في الكود كما هو موضح في المثال التالي:
import 'package:graphql/client.dart'; void main() async { final HttpLink httpLink = HttpLink( uri: 'https://jsonplaceholder.typicode.com/todos/1', ); final GraphQLClient graphQLClient = GraphQLClient( cache: GraphQLCache(), link: httpLink, ); const String query = r''' query { todos { title } } '''; final QueryOptions options = QueryOptions( document: gql(query), ); final QueryResult result = await graphQLClient.query(options); print(result.data['todos']); }
“اقرأ أيضاً: شرح استخدام AnimatedPositioned في فلاتر“
HTTP REST هي التقنية الأكثر شيوعاً والأكثر استخداماً لبناء API. ومع ذلك، لديها عيب، والذي في بعض الحالات يعد جانبًا مهمًا – وهو الحصول على مزيد من البيانات مما هو ضروري (Overfetching) أو الحصول على بيانات أقل مما هو ضروري (Underfetching). وذلك بسبب وجود نقاط نهاية (endpoints) تم تحديدها بشكل صارم، مما يؤدي في بعض الأحيان إلى استلام مزيد من البيانات مما هو مطلوب، أو الحاجة إلى تنفيذ عدة طلبات في آن واحد.
“اقرأ أيضاً: شرح استخدام ويدجت Slider في فلاتر“
بالنهاية، يجب اختيار الخيار الذي يناسب احتياجات مشروع Dart الخاص بك. يحتوي كل من HTTP و DIO و GraphQL على ميزاته وعيوبه، ويجب النظر فيها قبل اتخاذ القرار النهائي.