سؤال

الهدف

جافا العميل ياهو HotJobs خلاصة البحث REST API.

الخلفية

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

التفاصيل

التقدم

نظرت السؤال بقية العملاء جافا ؟ , لكن الحلول الآلية هناك نفترض أنك تقدم كل من الخادم و العميل ، مع JAXB الاحتجاج على POJOs لإنشاء مخطط بقية API.

باستخدام جيرسيجاكس-RS التنفيذ), لقد كنت قادرا على جعل دليل HTTP الطلب:

import com.sun.jersey.api.client.*;

...

ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);

WebResource webResource = client.resource("https://hj.yahooapis.com/v1/HJAuthTokens");
webResource.accept("application/xml");

// body is a hard-coded string, with replacements for the variable bits
String response = webResource.post(String.class, body);

// parse response into a org.w3c.dom.Document
// interface with Document via XPATH, or write my own POJO mappings

رد يمكن أن تبدو مثل:

<?xml version="1.0" encoding="utf-8"?>   
<Response>   
    <ResponseCode>0</ResponseCode>   
    <ResponseMessage>Login successful</ResponseMessage>
    <Token>NTlEMTdFNjk3Qjg4NUJBNDA3MkJFOTI3NzJEMTdDNDU7bG9jYWxob3N0LmVnbGJwLmNvcnAueWFob28uY29tO0pVNWpzRGRhN3VhSS4yQVRqRi4wWE5jTWl0RHVVYzQyX3luYWd1TjIxaGx6U0lhTXN3LS07NjY2MzM1OzIzNDY3NTsxMjA5MDE2OTE5OzZCM1RBMVNudHdLbl9VdFFKMFEydWctLQ==</Token>   
</Response>  

أو يمكن أن تبدو مثل:

<?xml version="1.0" encoding="utf-8"?>   
<yahoo:error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xml:lang="en-US">   
    <yahoo:description>description</yahoo:description>   
    <yahoo:detail>   
        <ErrorCode>errorCode</ErrorCode>   
    </yahoo:detail>   
</yahoo:error>  

الأسئلة

  • هل هناك طريقة لصناعة السيارات في توليد POJOs والتي يمكن تعبئتها/unmarshalled دون رسمي مخطط?
  • يجب أن تحاول أن تولد تلك POJOs باليد ، JAXB الشروح?
  • هل هناك أداة يجب أن تكون الاستفادة لذا لا يجب أن تفعل هذا يدويا ؟
هل كانت مفيدة؟

المحلول

انها مثيرة للاهتمام أن تقدم HTTP URL مثل اسم URI على المخطط ، ولكن في الواقع لا حفظ المخطط هناك.التي يمكن أن تكون الرقابة من جانبهم ، رسالة بريد إلكتروني أو مناقشة قائمة الترحيل قد الصحيح.

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


تحرير:انفجار من الماضي, ولكن رأيت التعليق, إعادة قراءة السؤال ، وأدركت أن الجملة الأولى كان من الصعب أن نفهم.لذا التوضيح:

واحدة جيدة جدا عادة, إذا كنت على وشك كتابة متاحة للجمهور على شبكة الإنترنت خدمة, جعل الخاص بك مخطط الوثيقة متاحة على نفس عنوان URL الذي تستخدمه المخطط هو اسم URI-أو أفضل ، يكون هذا العنوان يكون وصلة إلى وثائق كاملة (W3C XSD مساحة الاسم هو في حد ذاته جيد على سبيل المثال: http://www.w3.org/2001/XMLSchema).

نصائح أخرى

أود أن أقترح كتابة الفول باليد فقط التأشير مع JAXB الشروح إذا كان لديك إلى.معظم accessors/mutators (حاصل/واضعي) ليس لديك ؛ افتراضيا كل فول accessors والحقول يعتبر اسم مشتق باستخدام فول الاتفاقية ، الافتراضي هو استخدام العناصر بدلا من سمات (حتى سمات تحتاج إلى أن تكون المشروح).

بدلا من ذلك يمكنك بالطبع كتابة المخطط من جهة ، توليد الفول باستخدام JAXB ، إذا كنت مثل W3C مخطط الكثير.ومجرد استخدام الناتجة رمز, لا مخطط لربط البيانات.

كما أن POJO:التي يمكن أن تكون بسيطة جدا.شيء من هذا القبيل:

@XmlRootElement("Response")
class Response {
  public int responseCode;
  public String responseMessage;
  public String token; // or perhaps byte[] works for automated base64?
}

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

وإذا كان يجب الكشف التلقائي عن نوع من المحتوى, النظر في استخدام ستاكس محلل لمعرفة ما العنصر الجذر ثم ربط باستخدام JAXB Unmarshaller ، تسليم XMLStreamReader الذي يشير إلى أن العنصر الجذر.بهذه الطريقة يمكنك تمرير مختلفة نوع الكائن إلى ربط.

وأخيرا:إرسال/استقبال الطلبات:سهل القديمة HttpURLConnection يعمل موافق على وطلبات الوظائف (بناء باستخدام أقول URL.openConnection()).جاكرتا HttpClient لديه ميزات أكثر إذا لزم الأمر.لذلك في كثير من الأحيان لا تحتاج حقا منفصلة بقية العميل-أنها قد تأتي في متناول اليدين ، ولكن عموما بناء على http بسيط العميل القطع.

أجد HTTP4E مفيد جدا لصنع بقية المكالمات.فمن رهيبة الكسوف المساعد, وقد علامات التبويب ، جملة تلوين السيارات تشير إلى رمز الجيل بقية HTTP دعوة الإعادة ، الخ..أنه يقوم بعمل عظيم HTTP التصحيح, HTTP العبث القرصنة.أواجه الكثير من المرح مع ذلك.

http://www.ywebb.com/

محاولة JdkRequest من jcabi-http (أنا مطور).هذا هو كيف يعمل:

String body = new JdkRequest("http://www.google.com")
  .header("User-Agent", "it's me")
  .fetch()
  .body()

تحقق من هذا بلوق وظيفة لمزيد من التفاصيل: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html

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