سؤال

إذا فهمت بشكل صحيح، في نمط الراحة، يجب ترميز كل استعلام (أي كل إجراء على كل مورد لا يعدل حالة المورد) في سلسلة الاستعلام، باستخدام طريقة get، بدون نص على الإطلاق.

هل انا على حق؟

حسنًا، لدي العديد من التطبيقات التي تتواصل مع قاعدة البيانات من خلال رسالة XML يتم التعامل معها بواسطة مكون Visual Basic 6.

رسالة الاستعلام هي شيء من هذا القبيل

<xml>
  <service>account</service>
  <resource>invoice</resource>
  <action>query</action>
  <parameters>
    <page>1</page>
    <page_len>10</page_len>
    <order>date</order>
    <fields>*</fields>
    <conditions>
      <date>2009-01-01..2009-01-31</date>
      <customer_id>24</customer_id>
    </conditions>
  </parameters>
</xml>

نحن الآن بصدد إعادة تصميم رسائل XML الخاصة بنا، ونرغب في القيام بذلك بطريقة يمكن من خلالها تعيينها بسهولة إلى واجهة RESTful.

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

نحن نفكر في إرسال المعلمات ببادئة، شيء من هذا القبيل

http://account/invoice/?_page=1&_page_len=10&_order=date&_fields=*&date=2009-01-01..2009-01-31&customer_id=24

وسيكون XML شيئًا من هذا القبيل

[...]
    <_order>date</_order>
    <_fields>*</_fields>
    <date>2009-01-01..2009-01-31</date>
    <customer_id>24</customer_id>
[...]

نحن نحاول تحديد بعض تنسيقات XML البسيطة حقًا للعمليات الأولية، وأن XML الناتج يمكن تعيينه بسهولة إلى بقية أو JSON.

كيف يمكنك تعيين هذا النوع من الاستعلام في تطبيق الراحة؟هل هناك بعض المعايير المحددة؟أو بعض الصفحات التي تحتوي على عينات من الخام / XML /JSON؟ماذا عن إرجاع الخطأ أو مجموعات البيانات المتداخلة؟

شكرًا جزيلاً.

هل كانت مفيدة؟

المحلول

IMHO لكي تجعل نظامك مريحًا حقًا، يجب عليك إعادة التفكير في جميع الرسائل/الاستفسارات التي سترسلها.

هذا الجزء:

<conditions>
  <date>2009-01-01..2009-01-31</date>
  <customer_id>24</customer_id>
</conditions>

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

GET /customers/24/invoices?start_date=2009-01-01&end_date=2009-01-31

فكر في العلاقات بين مواردك.لنفترض أن لدينا نوع المورد المرتبط بنوع المورد Foo من خلال علاقة -إلى-متعدد.وفي هذه الحالة يمكنك أن تسأل عن هذه العلاقة كالتالي: GET /foo/123/bar وإضافة معلمات سلسلة الاستعلام لتصفيتها.تبدأ المشكلة عندما تريد تصفيتها بطريقة تتضمن علاقات بالموارد الأخرى.IMHO هذا يعني أن تصميم الموارد الخاص بك ليس مريحًا حقًا.

نصائح أخرى

وأنت في حاجة إلى URL ترميز في XML لتكون قادرة على تمرير ذلك، ولكن، إذا كنت تحويل XML لJSON ثم هل يمكن تمرير هذه السلسلة ومن ثم json-> أكس أو json-> كائن لمعالجة ذلك. وهذا من شأنه تمكين لك لتمرير الكائنات الأكثر تعقيدا حولها.

وانها ليست مثالية، ولكنها تعمل. :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top