تعمل Switchboard على تسهيل العمل مع واجهة برمجة التطبيقات (API). تساعدك Switchboard على تحويل مخططات JSON بسهولة. من خلال إنشاء لوحة مفاتيح وتحديد بعض الأسلاك، يمكنك إدارة حقول المخطط القديم التي تتضمن الحقول الموجودة في المخطط الجديد.
اسم Switchboard هو اتحاد لمشغلي الهاتف القدامى. باستخدام Switchboard، فإنك تعمل كمشغل. إن ربط حقول المخطط ببعضها البعض يشبه لوحة مفاتيح مشغل الهاتف. الصورة عن طريق تاريخ جولر.
عند العمل مع عمليات التكامل وواجهات برمجة تطبيقات الطرف الثالث، على سبيل المثال، غالبًا ما تواجه موقفًا حيث يجب حفر البيانات يدويًا. لنفترض أن لديك النوع التالي من مخطط قاعدة البيانات البسيط:
Column | Type ---------------+------- first_name | string last_name | string email | string
أنت تعمل مع واجهة برمجة تطبيقات مستخدم جهة خارجية، على سبيل المثال، والتي تُرجع النوع التالي من الحمولة:
{ "المعرف": 12335، "الاسم الأول": "جون"، "الاسم الأخير": "دو"، "معلومات الاتصال": {"البريد الإلكتروني الأساسي": "[email protected]" } }
إذن، ماذا تفعل الآن؟ ما هي أفضل طريقة لتحويل الحمولة إلى التنسيق الخاص بك؟ هل يبدو هذا مألوفا:
Response_dict = json.loads(response.body)data = {"first_name": Response_dict.get("firstName"),"last_name": Response_dict.get("lastName"),"email": Response_dict.get("contactInfo" ، {}).get("البريد الإلكتروني الأساسي") }
لسوء الحظ، يصبح الحل أعلاه فوضويًا للغاية عند العمل مع بنيات JSON المتداخلة أو واجهات برمجة التطبيقات المتعددة التابعة لجهات خارجية أو مجموعة منها. وهذا هو سبب فائدة Switchboard، فمن خلال تحديد لوحة تبديل جديدة، يمكنك بسهولة إدارة تعيينات البيانات بين المخططات المختلفة.
من استيراد لوحة التبديل Switchboard, Cordclass UserSwitchboard(Switchboard):first_name = Cord("firstName")last_name = Cord("lastName")email = Cord(["contactInfo", "primaryEmail"]) # لاحظ مدى سهولة الوصول المتداخل بيانات!
الآن، يبدو الرمز أفضل بكثير. لطيف - جيد!
Response_dict = json.loads(response.body)data = UserSwitchboard().apply(response_dict)
هذا المشروع لا يزال قيد التقدم. وثائق أفضل تأتي في وقت لاحق.
يعد تحديد لوحات التبديل الجديدة أمرًا سهلاً. كل ما عليك فعله هو استيراده وتحديد بعض الأوتار.
من استيراد لوحة التبديل Switchboard, Cordclass MySwitchboard(Switchboard):pet_name = Cord(source="petName", # يخبر المصدر موقع الحقل في المصدر schemarequired=True, # إذا كان الحقل مطلوبًا ومفقودًا، فسيتم رفع الاستثناءdefault="Mr. Dog" # إذا كان الحقل مفقودًا، فسيتم استخدام القيمة الافتراضية)
يمكن تعديل وظيفة لوحة التبديل باستخدام فئة Meta:
من استيراد لوحة التبديل Switchboard، Cordclass MySwitchboard(Switchboard):class Meta:# يخبرنا بما يجب فعله بالحقول المفقودة. الوظيفة الافتراضية هي INCLUDE,# مما يعني أنه إذا كان الحقل المصدر مفقودًا، فسيتم إلحاق الحقل ولكن قيمة الحقل # ستكون Nonmissing = Switchboard.EXCLUDE # Options: Switchboard.EXCLUDE | لوحة التبديل.تشمل | Switchboard.RAISEpet_name = الحبل ("petName")
يمكن للأسلاك الوصول إلى الحقول المتداخلة، وحتى القوائم.
من لوحة التبديل Import Switchboard, Cordclass MySwitchboard(Switchboard):target_field = Cord(source=["field1", # مطابقة لمفتاح الحقل 0, # مطابقة لقائمة الفهرس"field2" # مطابقة لمفتاح الحقل] )MySwitchboard().apply({ "field1": [{ "field2": "value" }] })# > { "target_field": "value" }
تساعد many
من سمات Switchboard في التعامل مع القوائم. على سبيل المثال:
فئة MySwitchboard(Switchboard):الهدف = الحبل("المصدر")data_in = [ {"المصدر": 1}، {"المصدر": 2}، {"المصدر": 3}، {"المصدر": 4} ]MySwitchboard(many=True).apply(data_in)# > [{ "target": 1 }, { "target": 2 }, { "target": 3 }, {"target": 4 }]