تطوير أفضل الممارسات طبقة API الروبوت

مقدمة

طبقة API هي طبقة الشبكة، هي وحدة التطبيقات الأساسية. بدأت تفعل 12 عاما من تطوير الروبوت، ولخص بعض من طبقة الممارسات API من تجربة هذه السنوات من التطور، ومحتوى أساسا حول HttpClient وإصلاحه اختيار أفضل وسيلة لإبلاغ نماذج برمجة واجهة المستخدم وتحديث البيانات استجابة عملية.

ما يلي هو مجرد جهة نظر شخصية، والمحتوى الفعلي من أي تناقض، يرجى الإشارة، وإذا رش، انقر فوق.

SDK عميل المتشعب

عنوان المتشعب العميل هو إشارة عامة، قد طلب مكتبة بنفس الاسم ك http، فإنه يشير إلى كل عميل طلبات HTTP.

وSDK عميل اثنين: HttpURLConnection وأباتشي HttpClient وإصلاحه المكتبات.

في أقرب الأوقات (وربما Android1.x بدء)، SDK لجافا HttpURLConnection نسخها عبر. لكن HttpURLConnection أسفل جدا، مع مزعجة للغاية. لديك لارسال تدفق عملية طلب الحصول على، وليس النزول 20 خطوط للقانون، وتحميل الملف الذي يريد أن يحارب بها كتلة متعددة الأجزاء الخاصة بهم، وهذه الفئة قبل Android2.2 وهناك خلل تسرب الذاكرة.

تقديرات غوغل أيضا لا تريد استخدام، فإنه سيتم بناؤها في مكتبة أباتشي HttpClient وإصلاحه في SDK. على سهولة بسيطة الاستخدام في الواقع الكثير، كما حققت مثل مارتي جزء من هذا الرمز، نحن لم يكن لديك لمحاربة يدويا. ولكن العيب هو أن وأيضا وجوه المنحى ، ومتاحة أكثر المتضخمة. إرسال طلب المشاركة، بالإضافة إلى نقطة رأس، من شأنه أن يخلق الكثير من الأشياء، وكمية من التعليمات البرمجية لا يزال الحصول على أسفل. وهكذا ولدت الكثير من حزمة مكتبات فئة لHttpClient وإصلاحه، وأنا استخدم أكثر من غيره هو الروبوت-المتزامن-HTTP و xutil. بعد Android5.0، سوف SDK لأباتشي HttpClient وإصلاحه إزالتها.

بالطبع هناك مكتبات التغليف لHttpURLConnection، مثل الطائرة غوغل. أداء ممتاز الطائرة، والمدمج في وظيفة صورة التحميل. في ذلك الوقت مشهد بعد فترة من الوقت، حتى الآن أنا لا تزال ترى العديد من استخدام مكتبة HTTP الثلاثي الطائرة القيام به. العيب المتشعب وظائف الطائرة هي جزء غير مكتملة، مثل الافتراضي وظيفة لا يمكن إرسال الطلب، طلب كتابة بعض الرموز، لا تدعم إعادة التوجيه.

العميل المتشعب الحديثة

المتشعب الموضوع العميل لم ينته بعد، ودفع أعلى عندما يتعلق الأمر الطائرة غوغل في عام 2013 مؤتمر IO، ولكن كان هناك مؤتمر حلقة صغيرة:

عندما قدم جوجل للمطورين الطائرة في الوقت المناسب، وهتف الجمهور بأحد الإجراءات التالية:

"أنا أفضل OkHttp".

في ذلك الوقت كان جذبت الجميع يضحك، بقيمة أفراد محبط للغاية مردود: "نعم، أنا مثل OkHttp للغاية."

ثم OkHttp على النار، مثل مقدمة الطائرة هو ترك الناس يعرفون OkHttp.

لماذا OkHttp النار؟

  • انها تعمل بكامل طاقتها: الدعم المثالي المتشعب الترميز، ويدعم بشكل كامل الاتفاق والمتشعب فعل، المتشعب مخبأ لل
  • هو الأداء المتفوق: أنه لا يستند إلى HttpURLConnection، ولا على أساس HttpClient وإصلاحه، بل تستخدم لإعادة تنفيذ-مجموعة المقبس. المدمج في تجمع الاتصال، سيتم إعادة استخدام الاتصال، واختيار أفضل المضيف، بحيث استتار الشبكة إلى الحد الأدنى
  • حتى أنها تدعم وظيفة اعتراضية من هذه الشبكة الحديثة
  • ومن API بسيط

OkHttp أندرويد ومنصة جافا هو حاليا أفضل المتشعب العميل، وليس واحدة. لكن OkHttp التغليف أيضا ولادة المكتبة الثلاثية يعتمد، مثل: Okhttputils وOkGo، فهي بسيطة جدا للاستخدام. إذا كنت ترغب في التعليق، يمكنك محاولة إنتاج نفس الفريق التحديثية.

طريقة الناس ينظرون شعبية من المعلومات:

  • شركة مربع: شركات مقرها الولايات المتحدة القيام به أجر، Okhttp المنتجة والتحديثية للفريق، وفريق لديه ماشية كبيرة تدعو JakeWharton.
  • JakeWharton: أعلى بقرة الروبوت في العالم الكبرى قد ولى، لجوجل، من حيث القيام بأعمال Kotlin. يعرف كثير من الناس أنه كتب ButterKnife، OkHttp، التحديثية، ولكن قد لا يعرفون أن حزمة فريق دعم V4 جوجل أيضا لم تدعم الرسوم المتحركة الملكية، والجميع مع مكتبة السمة NineOldAndroid له للقيام الرسوم المتحركة، ثم فريق Google عندما حزمة الدعم-V7 لم يظهر حتى الآن، والجميع مع من ActionBarSherlock لها القيام ActionBar. الرجل الحقيقي هو الانتظار حتى يوم واحد.

نموذج برمجة عملية استجابة

في اختيار العميل، OkHttp هو الخيار الافضل. ولكن على عملية استجابة نموذج البرمجة، وجميع النماذج الحالية توفر استدعاء العميل للتعامل مع ردا على ذلك، ويمثلها الزائفة رمز:

رد النموذج في تعقيد الرمز عند مشاكل الظهر CallbackHell، بالطبع، يمكنك استخدام طريقة استخراج إلى إعادة بناء، فإنه يمكن أيضا أن تستخدم لرسم رد RxJava التسلسل الهرمي، ولكن من حيث القراءة لا يزال أي رمز تزامن تبدو جميلة. ننظر إلى نموذج تزامن كود:

ومن الواضح أن النموذج التزامن أكثر قابلية للقراءة، حتى لو كنت منطق غير متزامن أكثر تعقيدا، وأقل قليلا لا تكون قابلة للقراءة. كيف يمكن إرسال غير متزامن طلب رمز تزامن ذلك؟

جافا يمكن استخدامها لتحقيق المستقبل، أكثر أناقة هو Kotlin coroutine. استخدام Kotlin كود coroutine يبدو مثل هذا:

مثل لغات أخرى Kotlin Coroutine coroutine، وقد 2 المزايا الرئيسية: أداء جدولة أفضل، والتزامن يصبح كود غير متزامن. لن نناقش هنا كيفية استخدام coroutine، ومجرد استخدام coroutine، وإذا كنت تريد أن تتعلم coroutine، وأفضل مورد هو الموقع الرسمي Kotlin.

كيفية تحديث واجهة المستخدم إخطار البيانات

إذا كنت أكتب في طبقة API UI، ليست هناك مشكلة، ولكن من الواضح أنها ليس لديها أي صيانة وتطويره. عندما كنا استخراج طبقة واحدة API (طبقة P عادة MVP) عندما فصل الحصول على البيانات ومعالجة شارك كود UI، يجب أن يواجه هذه المشكلة.

عادة ما تكون هناك ثلاثة العلاجات:

  • استدعاء مخصص
  • استخدام EventBus
  • استخدام LiveData

الاستدعاء مع رمز مخصص مكتوبة بطريقة تبدو مثل هذا:

منطق هذا التجسيد يتطلب أن يكون لكل رد اتصال مخصص، كمية كبيرة من التعليمات البرمجية، وقبيحة وغير مرغوب فيه.

استخدام EventBus إخطار UI، تريد كتابة التعليمات البرمجية مثل هذا:

يمكننا أن نرى، EventBus الطريق ليس لدينا لتحديد عدد كبير من الاسترجاعات لعدد كبير من الطرق لتحديد معرف الحدث. عندما يكون المشروع معقد، قد يكون هناك تحديد مئات حدث ليس من السهل السيطرة عليها. حتى في هذه الطريقة ليست الطريقة المثلى.

طريقة LiveData إلى رمز الكتابة من هذا القبيل:

تستطيع أن ترى، LiveData الطريقة يمكننا تجنب تحديد الهوية وحدث من رد، صيغة أكثر إيجازا. الأهم من ذلك، يمكن LiveData مراقبة دورة الحياة الطبيعية للتغيرات UI، ويمكن تجنب بعض التسريبات الذاكرة، وتحديث واجهة المستخدم في أفضل وقت.

MVP وMVVM

يجب أن يكون العميل UI الرئيسي والتعامل مع معظم الهندسة المعمارية كفاءة MVVM، فيو الأمامية والرد تأكدت تماما هذا.

MVVM على الروبوت وهناك ثلاثة أنواع من التنفيذ:

  • LiveData وViewModel
  • ربط البيانات
  • واستنادا إلى وكيل Kotlin لتحقيق طبقة VM

التي تحتاج إلى ربط البيانات لمعرفة بعض القواعد، ومثل فيو الأمامية محددة، ولكن أيضا لأنه مع انعكاس في التعقيد واجهة سوف يكون قليلا مشاكل الأداء تردد التحديث، ولكن أيضا خيارا جيدا للغاية.

Kotlin يدعم الطبيعية وسيط العقارات والقائم على وكيل قواعد Kotlin في وسعنا لتحقيق التحديث الحيوي من واجهة المستخدم، ولكن هذا يتطلب بعض الجهد.

الشخصية المفضلة هي LiveData وViewModel.

وأظهر العرض على جزء صغير من الطبقة أي تغيير في دورة الحياة من منطق معالجة UI، مثل عند نهاية UI، ومقدم غير معروف، مما يجعل من المستحيل لتحرير بعض الموارد. يمكنك الذهاب يدويا كتابة بعض الرموز، ولكن ViewModel هو الخيار الافضل، فإنه يمكن رصد UI الطبيعي تدميرها. حتى استبدال كود ViewMode مثل هذا:

أفضل الممارسات

وخلاصة القول، وأفضل الممارسات، استنادا إلى تجربتي الشخصية رسمها هي: اختر OkHttp طلب نقل، معالجة استجابة باستخدام Kotlin Coroutine، مع تحديثات UI LiveData بإعلام، وهذه التجريد المنطقي للطبقة VM، والتي تتجسد كما ViewModel.

لا أن تحصل على الطبقة الصلبة من طلب URL هو أساسا الشبكة؟ هذه ليست أفضل؟

يستخدم رمز أعلاه مكتبة مفتوحة المصدر AndroidKTX يمكنني القيام به. يشار الى ان مثل هذه الطريقة البسيطة التي تدعم طلبات أخرى، تعيين رأس العالمي، ووضع اعتراضية العرف، HTTPS دعم ذلك؟ هذه هي الوظائف الأساسية للمكتبة الشبكة، وبطبيعة الحال، ودعم ذلك.

AndroidKTX عنوان جيثب هو: الشبكي: //github.com/li-xiaojun/AndroidKTX

ولذلك، فإن ممارسة كود I سجلت تحت طبقة API المشروع:

UI كود طبقة شيء من هذا القبيل:

الروبوت العقل رسم الخرائط والمواد التعليمية

الحصول على معلومات عن طرق: التركيز + بريد إلكتروني إلى الأمام + الخاص الرد، "بيانات أندروز" الوصول الحر!

هناك العديد من الروبوت الحرة على أعلى ترتيب المواد التعليمية، بما في ذلك واجهة المستخدم المتقدمة، وتحسين الأداء، ودورات مهندس معماري، NDK والتنمية الهجينة: أكثر الروبوت ReactNative + Weex مثل المعرفة التقنية من أشرطة الفيديو والهندسة المعمارية ومجموعة متنوعة من الكتب الإلكترونية لقراءة، تحتاج إلى رسائل خاصة ورسائل خاصة ورسائل خاصة: "البيانات الروبوت" الوصول الحر!

"رسائل الجذر" قريبا إلى منصات متحركة مقابل 500 ين فقط

تلعب وضع التحكم: نقاط الملمس، HGGTO zagorze شار الرشاشة الخفيفة طلاء I

مشاركة الحزمة من التشغيل الآلي الروبوت القائم على جنكينز

وقال بان اليانغتسي المعلم تساى شو كون: أنا آسف ...

2016 أزواج تشونغ الأسبوع | هذا الفريق الشاب للقيام أربعة دوار الحركة النفط UAV، هامش متغير، تكلفة التشغيل هي نصف Dajiang

وقد فاز اورانج الشعب التسويق لا تعمل الأعصاب الصعب

علي + الحرب بعد أعلن رسميا الجياع المجموعة الأمريكية: المأكولات الجاهزة الحرب العالمية الثانية اندلعت، الذي بيئة أفضل؟

وسوف أعرض عدة الدراما الأخير مقتبس من بلدان أخرى في البرنامج النصي، كنت مطاردة أنه عدد قليل؟

اللعب مراقبة الوضع: السنة الهيكل الخارجي القديم GK، PG RX79 تصل نوع البحرية

الروبوت المقابلة: بيندر كنت لا تعرف؟

وانغ جونكاي أكل وعاء الساخنة في كينيا لسبب!

وهي امرأة وراء كلمات البقاء على قيد الحياة - يي مولين Dengbierken البريطانية