การเลือกการนำ JAX-RS ไปใช้สำหรับโครงการใหม่


35

ฉันกำลังเริ่มโครงการ Java ใหม่ซึ่งจะต้องมี RESTful API มันจะเป็นแอปพลิเคชันธุรกิจ SaaS ที่ให้บริการลูกค้ามือถือ

ฉันได้พัฒนาโครงการหนึ่งกับ Java EE 6 แต่ฉันไม่คุ้นเคยกับระบบนิเวศมากนักเนื่องจากประสบการณ์ส่วนใหญ่ของฉันอยู่บนแพลตฟอร์ม Microsoft

ซึ่งจะเป็นตัวเลือกที่เหมาะสมสำหรับการใช้งาน JAX-RS สำหรับโครงการใหม่เช่นที่อธิบายไว้

ตัดสินจากรายการของวิกิพีเดียดูเหมือนว่าคู่แข่งหลักคือ Jersey, Apache CXF, RESTeasy และ Restlet แต่การเปรียบเทียบการนำ JAX-RS ไปใช้ในวิกิพีเดียนั้นมาจากปี 2008

ความประทับใจครั้งแรกของฉันจากหน้าแรกของพวกเขาคือ:

  • CXFตั้งเป้าหมายที่จะเป็นโซลูชั่นที่ครอบคลุมมาก (เตือนให้ฉันนึกถึง WCF ในพื้นที่ของ Microsoft) ซึ่งทำให้ฉันคิดว่ามันมีความซับซ้อนในการเข้าใจการตั้งค่าและการดีบักมากกว่าสิ่งที่ฉันต้องการ
  • Jerseyเป็นการนำมาใช้อ้างอิงและอาจเป็นทางเลือกที่ดี แต่เป็นมรดกจาก Sun และฉันไม่แน่ใจว่า Oracle จัดการกับมันอย่างไร (หน้าประกาศไม่ทำงานและการแจ้งเตือนครั้งล่าสุดจาก 4 เดือนก่อน);
  • RESTeasyมาจาก JBoss และอาจเป็นตัวเลือกที่ดีแม้ว่าฉันจะไม่แน่ใจเกี่ยวกับการเรียนรู้
  • ดูเหมือนว่าRestletจะได้รับความนิยม แต่มีประวัติมากมายฉันไม่แน่ใจว่ามันทันสมัยใน Java EE 6 โลกหรือว่ามี J2EE ที่หนัก (เช่นการกำหนดค่า XML จำนวนมาก)

อะไรคือข้อดีของทางเลือกเหล่านี้? แล้วการเรียนรู้โค้ง สนับสนุนคุณสมบัติหรือไม่ เครื่องมือ (เช่นตัวช่วยสร้าง NetBeans หรือ Eclipse) ความง่ายในการดีบักและการปรับใช้คืออะไร โครงการเหล่านี้เป็นปัจจุบันมากกว่าโครงการอื่นหรือไม่ มีความเสถียรเพียงใด


1
ฉันชื่นชมการแก้ไขชื่อเรื่อง แต่ฉันไม่ได้ถามจริง ๆ ว่า JAX-RS เหมาะสมกับโครงการมือถือหรือไม่ นั่นจะเป็นคำถามอื่น ฉันกำลังพยายามค้นหาว่าควรใช้การแนะนำ JAX-RS ใด
Fernando Correia

คำตอบ:


22

ฉันรักDropwizard มากขึ้นสำหรับโซลูชันโดยรวม

Dropwizard สนับสนุนโซลูชันที่มีน้ำหนักเบาซึ่งมีวัฏจักรการพัฒนาที่เร็วกว่า เป็นหลักมันให้กาวสำหรับกรอบที่รู้จักกันดีดังต่อไปนี้:

  • ท่าเทียบเรือ (HTTP)
  • เจอร์ซีย์ (JAX-RS)
  • แจ็คสัน (JSON หรือ XML)
  • Guava (เพิ่มยอดเยี่ยมให้กับห้องสมุด JDK)
  • เมตริก (การตรวจสอบแอปพลิเคชันตามเวลาจริง)
  • ตัวตรวจสอบ Hibernate (การตรวจสอบอินพุต)
  • OAuth (รับรองความถูกต้อง RESTful)

การผสมผสานที่กล่าวมาข้างต้นประกอบกับวิธีการทดสอบการใช้งานที่สมบูรณ์ทำให้โซลูชั่นที่สมบูรณ์สำหรับการให้บริการของคุณและทำงานได้อย่างรวดเร็ว

ใช่? และคำถาม JAX-RS ฉันถาม ...

คุณจะสังเกตเห็นว่าทางเลือกของพวกเขาคือ Jersey การอ้างอิง JAX-RS การเป็นคนที่มีความรับผิดชอบฉันคิดว่านี่จะเป็นปัญหา แต่ไม่มีเส้นโค้งการเรียนรู้ ทั้งสองส่วนใหญ่ใช้แทนกันได้ อย่างไรก็ตามฉันจะบอกว่าลูกค้า Jersey เสนอส่วนต่อประสานที่คล่องแคล่วสำหรับการสร้างการทดสอบ ตัวอย่างจะเป็น ...

 @Override
  protected void setUpResources() {
    addResource(new HelloWorldResource("Hello, %s!","Stranger"));

    setUpAuthenticator();
  }

  @Test
  public void simpleResourceTest() throws Exception {

    Saying expectedSaying = new Saying(1,"Hello, Stranger!");

    Saying actualSaying = client()
      .resource("/hello-world")
      .get(Saying.class);

    assertEquals("GET hello-world returns a default",expectedSaying.getContent(),actualSaying.getContent());

}

2
ขอบคุณมากที่นำ Dropwizard มาที่ฉัน ฉันไม่รู้เกี่ยวกับมันและดูเหมือนว่าจะตอบสนองความต้องการของฉันได้เป็นอย่างดี มันดูออกมาดีมีประโยชน์และลงสู่พื้นดินและอาจช่วยให้ฉันมีปัญหามากมายในขณะที่ช่วยฉันสร้างโซลูชันที่ดีกว่าที่ฉันได้รับความรู้ผิวเผินเกี่ยวกับแพลตฟอร์ม Java EE และมาจาก บริษัท ที่ประสบความสำเร็จอย่าง Yammer ที่ให้บริการกับตลาดองค์กรนั้นเป็นข้อได้เปรียบอย่างแน่นอน อีกครั้งขอบคุณมาก
Fernando Correia

1
ไม่มีปัญหา. ฉัน blogged เกี่ยวกับโครงการของฉันที่แสดงคุณสมบัติ Dropwizard มากมาย มันอยู่ภายใต้ใบอนุญาต MIT ดังนั้นอย่า
Gary Rowe

นั่นจะช่วย ชื่นชมมาก
Fernando Correia

1
ฉันเอนตัวไปใช้ Jackson, Guava, Validator และ OAuth แล้วดังนั้นนี่จึงเป็นเกมที่ไม่ต้องคิดมาก ... ขอบคุณ
PhiLho

คำเตือน: Jersey 2.0 แย่กว่า 1.0 อย่างมาก มันขาดฟังก์ชั่นการใช้งานที่เคยมีอยู่ใน 1.0 มันบังคับให้ใช้เฟรมเวิร์ก DI เฉพาะกับคุณและการสนับสนุนชุมชนนั้นแย่กว่าที่เคยเป็น
Gili

6

คุณสามารถดูคำถามนี้ซึ่งกล่าวถึงประสบการณ์บางอย่างจากนักพัฒนาอื่น ๆ

ฉันสามารถแนะนำเจอร์ซี่เป็นการส่วนตัว มันใช้งานง่ายมากและมีการติดตามที่ดีเพราะเป็นการใช้งานอ้างอิง นี่ก็หมายความว่ามันจะได้รับการดูแลและสนับสนุนในอีกไม่นาน


1
ขอบคุณสำหรับคำตอบที่เป็นประโยชน์ของคุณและสำหรับการเชื่อมโยงกับคำถามที่เกี่ยวข้องที่ - แปลกก็ไม่ได้แสดงในการค้นหา อย่างไรก็ตามคำตอบนั้นมาจาก 4 ปีที่แล้วดังนั้นฉันขอขอบคุณคำแนะนำที่เป็นปัจจุบันของคุณ
Fernando Correia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.