ทุก ๆ ปีในอดีตมีกรอบ Java มากขึ้นเรื่อย ๆ เช่นเดียวกับ JavaScript ทุกคนคิดว่าพวกเขารู้ว่าฟังก์ชั่นของกรอบที่ดีควรเป็นอย่างไร แม้แต่คุณยายเก่าของฉันก็ใช้กรอบที่ฉันไม่เคยได้ยินมาก่อนและอาจจะไม่เคยใช้ ตลาดเฟรมเวิร์กป่องนั้นอิ่มตัวด้วยกรอบการป่องที่สามารถทำอะไรได้เกือบทุกอย่าง แต่จะตัดสินได้อย่างไร? บทความนี้มีวัตถุประสงค์เพื่อให้กรอบการทำงานของ Java Restful ที่ดีที่สุดในปัจจุบัน ฉันแนะนำผลิตภัณฑ์ที่มีน้ำหนักเบาเพียงแค่ข้ามเฟรมเวิร์กที่ออกแบบมา ในเวลาเดียวกันฉันแค่ต้องการให้พวกเขามีเสถียรภาพและเป็นผู้ใหญ่ให้คุณสมบัติที่เรียบง่ายและมีน้ำหนักเบา ฉันเพิ่งทำกฎนี้เมื่อแนะนำเฟรมเวิร์กการเล่นเหตุผลที่ได้รับในภายหลัง Java Restful Framework ที่ใช้ในโครงการในอนาคตขึ้นอยู่กับความต้องการในปัจจุบันของคุณทั้งหมด เพื่อให้ตัวเลือกของคุณง่ายขึ้นฉันจะแสดงคุณสมบัติเฟรมเวิร์กที่โดดเด่นที่สุดโดยหวังว่าสิ่งนี้จะช่วยให้คุณประหยัดเวลาได้
ดร็อปวินการ์ด
เวลาเกิด: 2011
คะแนน: 4.5/5
Dropwizard ให้ห้องสมุด Java ที่มีความเสถียรและเป็นผู้ใหญ่และห่อหุ้มไว้ในแพ็คเกจที่เรียบง่ายและมีน้ำหนักเบา
Dropwizard อยู่ที่ไหนสักแห่งระหว่างเฟรมเวิร์กและห้องสมุด มันมีความต้องการที่จำเป็นทั้งหมดในการพัฒนาเว็บแอปพลิเคชัน ด้วยความเป็นโมดูลในตัวแอปพลิเคชันสามารถยังคงเล็กและลีนลดการพัฒนาและการบำรุงรักษาเวลาและลดภาระ
Dropwizard ใช้ไลบรารี Jetty HTTP ที่มีอยู่เพื่อฝังลงในโครงการของคุณโดยไม่จำเป็นต้องใช้เซิร์ฟเวอร์ภายนอก โครงการ Dropwizard ทั้งหมดมีวิธีหลักในการจัดการเซิร์ฟเวอร์ HTTP ในตัว
ลิงค์ <br /> เว็บไซต์อย่างเป็นทางการเอกสาร GitHub
ข้อได้เปรียบ
การก่อสร้างโครงการอย่างรวดเร็วและเริ่มต้น
เป็นแบบแยกส่วน
เร็วอย่างไม่น่าเชื่อ (อย่างน้อยก็ขึ้นอยู่กับผลลัพธ์ที่วัดโดยตัวชี้วัดในตัว)
ท่าเทียบเรือสำหรับ http, jersey for rest และ jackson สำหรับ json
นอกจากนี้ยังรองรับห้องสมุดอื่น ๆ เช่นหนวด, logback, JDBI, Hibernate Validator, Guava, ...
สนับสนุนการตรวจสอบด้วยตัวชี้วัด
วิธีหลักเริ่มต้นเซิร์ฟเวอร์ Jetty ซึ่งสามารถดีบักและบำรุงรักษาได้อย่างง่ายดาย
ความแข็งแกร่งของชุมชนที่แข็งแกร่ง
ข้อบกพร่อง
เอกสาร Dropwizard เป็นแหล่งความรู้หลัก แต่ก็ไม่ได้ยอดเยี่ยม คุณอาจต้องค้นหาและค้นหาเอกสารสำหรับห้องสมุดบุคคลที่สาม
ด้วยเหตุผลบางอย่างข้อผิดพลาดจะถือเป็นข้อความธรรมดาหากคุณต้องการให้ผลการตอบกลับเป็น JSON เสมอนี่อาจเป็นปัญหา
ตรวจสอบให้แน่ใจว่าใช้ Dropwizard ล่าสุดรุ่นเก่าบางรุ่นใช้ห้องสมุดบุคคลที่สามที่ถูกทิ้งร้าง และมันยากที่จะอัพเกรด dropwizzard ก่อน
ตัวอย่าง
แพ็คเกจ com.example.helloworld; นำเข้า io.dropwizard.application; นำเข้า io.dropwizard.setup.bootstrap; นำเข้า io.dropwizard.setup.environment; นำเข้า com.example.helloworld.resources.helloworldresource; ระดับสาธารณะ HelloWorLdapplication ขยายแอปพลิเคชัน <HelloWorLdConfiguration> {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {ใหม่ helloWorldApplication (). run (args); } @Override สตริงสาธารณะ getName () {return "hello-world"; } @Override โมฆะสาธารณะเริ่มต้น (bootstrap <helloWorldConfiguration> bootstrap) {// ยังไม่มีอะไรทำ} @Override โมฆะสาธารณะเรียกใช้ (การกำหนดค่า HelloWorldConfiguration สภาพแวดล้อม) {// ยังไม่มีอะไรทำ}}}} หมายเหตุ <br /> ฉันไม่ต้องการแนะนำกรอบนี้สำหรับโครงการขนาดใหญ่ แต่ถ้าคุณต้องการลองคุณจะไม่ผิดหวัง ส่วนใหญ่เฟรมเวิร์กนี้ใช้ส่วนประกอบเว็บ Java ที่ทันสมัยที่สุดและประกอบเป็นกรอบการทำงานที่ง่ายและใช้งานง่าย
น่าเสียดายที่สิ่งนี้ยังนำมาซึ่งปัญหา การรวมห้องสมุดเหล่านี้อาจนำไปสู่ปัญหาที่ไม่คาดฝัน นี่คือเหตุผลที่ฉันสูญเสีย 0.5 ดาวสำหรับมันโดยไม่ให้คะแนนเป็นคะแนนเต็ม 5 ดาว
เสื้อ
เวลาเกิด: 2012 (เจอร์ซีย์ 2.x)
คะแนน: 5/5
เฟรมเวิร์ก Jersey Restful เป็นเฟรมเวิร์กโอเพ่นซอร์สที่ใช้งานโดยใช้ข้อกำหนด JAX-RS (JSR 311 & JSR 339) มันขยายการใช้งาน JAX-RS และให้คุณสมบัติและเครื่องมือเพิ่มเติมที่สามารถลดความซับซ้อนของบริการและการพัฒนาลูกค้าได้ แม้จะค่อนข้างใหม่กับ Xinyi แต่ก็เป็นบริการที่เหลืออยู่เกรดผลิตภัณฑ์และกรอบการทำงานของลูกค้า
ลิงค์ <br /> เว็บไซต์อย่างเป็นทางการเอกสาร GitHub
ข้อได้เปรียบ
เอกสารและตัวอย่างที่ยอดเยี่ยม
เร็ว
การกำหนดเส้นทางง่ายสุด ๆ
การรวม Junit ที่ราบรื่น
โดยส่วนตัวเมื่อพัฒนาบริการที่เหลือการใช้งาน JAX-RS ดีกว่าเฟรมเวิร์ก MVC
มันสามารถรวมเข้ากับห้องสมุด/เฟรมเวิร์กอื่น ๆ (Grizzly, Netty) นี่อาจเป็นเหตุผลว่าทำไมผลิตภัณฑ์จำนวนมากจึงใช้มัน
สนับสนุนการเชื่อมโยงแบบอะซิงโครนัส
ไม่ชอบคอนเทนเนอร์ servlet? คุณสามารถใช้งานได้เมื่อใช้เสื้อ
Wadl, XML/JSON สนับสนุน
รวมอยู่ใน glassfish
ข้อบกพร่อง
Jersey 2.0+ ใช้การใช้การฉีดพึ่งพาที่ซับซ้อนบางอย่าง
อาจไม่ใช่เรื่องเลวร้าย Jersey 1.x ใช้งานโดยใช้ JAX-RS เก่ากว่า
ห้องสมุดบุคคลที่สามจำนวนมากรองรับ Jersey 1.x เท่านั้นและไม่สามารถใช้ได้ใน Jersey 2.x
ตัวอย่าง
แพ็คเกจ org.glassfish.jersey.examples.helloworld; นำเข้า javax.ws.rs.get; นำเข้า Javax.ws.rs.path; นำเข้า javax.ws.rs.produces; @Path ("HelloWorld") ชั้นเรียนสาธารณะ HelloWorldResource {สตริงสุดท้ายคงที่สาธารณะ cliched_message = "Hello World!" - @get@produces ("text/plain") สตริงสาธารณะ gethello () {return cliched_message; - คำอธิบายประกอบ
Jersey เป็นตัวเลือกของฉัน 5 ดาว
Ninja Web Framework
เวลาเกิด: 2012
คะแนน: 3.5/5
Ninja Web Framework เป็นเฟรมเวิร์ก Java Web เต็มรูปแบบ เสถียรรวดเร็วเชื่อถือได้เกรดผลิตภัณฑ์
มันให้ทุกอย่างที่พัฒนาทดสอบเผยแพร่และรักษาเว็บแอปพลิเคชั่นที่พักผ่อน (Servlets, Guice, JPA, การย้ายถิ่นของ Flyway, Maven ฯลฯ )
เช่นเดียวกับ Dropwizzard Ninja Web Framework เป็นสแต็กซอฟต์แวร์แบบบูรณาการ คุณไม่จำเป็นต้องสร้างของคุณเองเพียงแค่ใช้ maven archetype เพื่อสร้างโครงการใหม่นำเข้าสู่ IDE และเริ่มการเข้ารหัส
ลิงค์ <br /> เว็บไซต์อย่างเป็นทางการเอกสาร GitHub
ข้อได้เปรียบ
เร็ว
การก่อสร้างโครงการอย่างรวดเร็วและเริ่มต้น
เป็นแบบแยกส่วน
XML, HTML, การแสดงผล JSON
นอกจากนี้ยังได้รับการสนับสนุนห้องสมุดอื่น ๆ (เช่น Guice, Logback, Guava ฯลฯ )
การคงอยู่ของข้อมูลที่ดีและการแคช
ไม่ชอบคอนเทนเนอร์ Servlet? คุณสามารถเลือกภาชนะที่คุณชอบได้
หากคุณไม่ชอบคอนเทนเนอร์เลยคุณสามารถใช้โหมดสแตนด์อโลนและใช้ท่าเทียบเรือเป็นขวดที่กำลังดำเนินการด้วยตนเอง
ข้อบกพร่อง
ในทำนองเดียวกันเช่น Dropwizzard เอกสารมี แต่ไม่ดีพอ ฉันใช้เวลานานกว่าจะได้รู้จัก เฟรมเวิร์กนี้ยังต้องอาศัยห้องสมุดอื่น ๆ อีกมากมายและบางครั้งก็เป็นปัญหาที่จะได้รับข้อมูลที่จำเป็น
ชุมชนเล็ก ๆ ไม่ค่อยมีชื่อเสียงมาก มีข่าวลือว่าเฟรมเวิร์กนี้ถูกสร้างขึ้นโดยผู้ใช้ Play 2.x ที่เปลี่ยนมาเป็น Scala
ตัวอย่าง
ตัวควบคุมแพ็คเกจ คลาสสาธารณะ ApplicationController {ดัชนีผลลัพธ์สาธารณะ () {person person = บุคคลใหม่ (); person.name = "John Johnson"; Return Results.json (). render (บุคคล); -หมายเหตุ <br /> มันดูดี แต่ฉันจะทิ้งมันไว้ก่อนที่มันจะครบกำหนด
เล่นเฟรมเวิร์ก
เวลาเกิด: 2011
คะแนน: 4/5
ใช้เฟรมเวิร์กเล่นเพื่อสร้างสร้างและเผยแพร่เว็บแอปพลิเคชันด้วยการสนับสนุน Java & Scala มันใช้ Akka ขึ้นอยู่กับสถาปัตยกรรมไร้สัญชาติที่มีน้ำหนักเบา ควรใช้สำหรับแอปพลิเคชันที่มี CPU ต่ำและการใช้หน่วยความจำในระดับใหญ่
ลิงค์ <br /> เว็บไซต์อย่างเป็นทางการเอกสาร GitHub
ข้อได้เปรียบ
พัฒนาง่าย
เร็ว แต่ไม่เร็วเท่ากับเฟรมเวิร์กอื่น ๆ
ขึ้นอยู่กับ Netty รองรับ I/O ที่ไม่ปิดกั้น มันยอดเยี่ยมเมื่อจัดการการโทรจากระยะไกลแบบขนาน
ชุมชนมีขนาดใหญ่
การก่อสร้างโครงการอย่างรวดเร็วและเริ่มต้น
เป็นแบบแยกส่วน
MVC
พักผ่อน, JSON/XML, เว็บซ็อกเก็ต, I/O ที่ไม่ปิดกั้น
เพียงรีเฟรชเบราว์เซอร์เพื่อดูการเปลี่ยนแปลงล่าสุด
สนับสนุน async
มีหนังสือที่ตีพิมพ์
ข้อบกพร่อง
เวอร์ชัน 2.0 เป็นกรอบ Java ที่ถกเถียงกันมากที่สุด เปลี่ยนไปใช้ Scala ทำให้นักพัฒนา Java บางคน outtraged
ไม่เข้ากันได้ย้อนหลัง เล่น 2.x เขียนใหม่
มันเป็นที่รู้จักกันว่ามีน้ำหนักเบา แต่มันค่อนข้างป่อง
เครื่องมือสร้าง SBT รู้จักกันในนาม Maven Killer แต่ไม่เคยเก่งในการแทนที่ ยากที่จะเรียนรู้และกำหนดค่า
ไม่ให้บริการ
ทำลายการเปลี่ยนแปลงระหว่างรุ่น
ตัวอย่าง
แพ็คเกจคอนโทรลเลอร์นำเข้า play.api._import play.api.mvc._ แอปพลิเคชันคลาสขยายคอนโทรลเลอร์ {def hello (ชื่อ: สตริง) = action {ok ("hello" + name + "!")}}}หมายเหตุ <br /> ไม่ว่าฉันจะบ่นมากแค่ไหนฉันก็ยังชอบและเลือกเฟรมเวิร์กนี้ก่อน น่าเสียดายที่ฉันสามารถให้ได้ 4 ดาวเท่านั้น ฉันเชื่อมั่นอย่างยิ่งว่ากรอบการทำงานที่ใช้ JAX-RS เหมาะสำหรับบริการบนเว็บ
restexpress
เวลาเกิด: 2009
คะแนน: 3/5
Restexpress เป็น wrapper สแต็ก HTTP ที่ไม่ได้มีน้ำหนักเบา HTTP เพื่อให้ง่ายต่อการสร้างบริการ Java Resful
เป้าหมายของ Restexpress คือการสนับสนุนแนวทางปฏิบัติที่ดีที่สุด
การเชื่อมโยง
คนอื่น ๆ
ข้อได้เปรียบ
microframework จริง
ประสิทธิภาพสูงสุดเร็วและเชื่อถือได้
XML/JSON
หนึ่งในกรอบการพักผ่อนที่เก่าแก่ที่สุดและมีเสถียรภาพที่สุด
ข้อบกพร่อง
ไม่มีเอกสาร
แทบจะไม่มีการสนับสนุน
ชุมชนเล็ก ๆ
ตัวอย่าง
แพ็คเกจ com.example; นำเข้า java.io.ioException; นำเข้า io.netty.handler.codec.http.httpmethod; นำเข้า org.restexpress.restexpress; คลาสสาธารณะ Main {สาธารณะ Static Restexpress starterver (String [] args) พ่น IOException {RESTEXPRESS SERVER = ใหม่ RESTEXPRESS (); myresource r = new myresource (); server.uri ("/myapp/myresource", r). method (httpmethod.get) .noserialization (); server.uri ("/myapp/myresource", r) .method (httpmethod.post); Server.bind (8080); กลับเซิร์ฟเวอร์; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {restexpress server = starterver (args); System.out.println ("กด Enter เพื่อหยุดมัน ... "); System.in.read (); Server.shutdown (); -หมายเหตุ <br /> แม้ว่าเฟรมเวิร์กนี้เร็วมาก แต่ฉันก็ไม่ต้องการแนะนำเช่นกัน การขาดเอกสารและการขาดการสนับสนุนทำให้เป็นกรอบการทำงานที่ด้อยพัฒนา ให้ 3 ดาวสำหรับความเร็ว
ร้านค้า
เวลาเกิด: 2548
คะแนน: 4.5/5
RESTELE ช่วยให้โปรแกรมเมอร์ Java สร้างเว็บ API ขนาดใหญ่และเร็วซึ่งสอดคล้องกับรูปแบบสถาปัตยกรรมที่สงบ
มันมีระบบการกำหนดเส้นทางและการกรองที่ทรงพลัง ไคลเอ็นต์/เซิร์ฟเวอร์ Java API ที่รวมเป็นไปตามแพลตฟอร์มหลักทั้งหมด (Java SE/EE, Google AppEngine, OSGI, GWT, Android) และให้ส่วนขยายนับไม่ถ้วนเพื่อตอบสนองความต้องการของโปรแกรมเมอร์
เท่าที่ฉันสามารถบอกได้ว่ามันเป็นเฟรมเวิร์ก Java Restful ครั้งแรก หลาย บริษัท ใช้มัน แต่คุณอาจไม่เคยได้ยินมาก่อนราวกับว่ามันไม่สามารถมองเห็นได้อีกต่อไป
ลิงค์ <br /> เว็บไซต์อย่างเป็นทางการเอกสาร GitHub
ข้อได้เปรียบ
ทรงพลัง
กรอบระดับองค์กร
Java SE หลายแพลตฟอร์ม, Java EE, Google Web Toolkit, Google AppEngine, Android, OSGI Environments
สนับสนุน JAX-RS (เช่นเดียวกับ Jersey)
การสนับสนุนการพักผ่อนขั้นสูงที่สุด
เป็นแบบแยกส่วน
สนับสนุนห้องสมุดอื่น ๆ
การพัฒนามีการใช้งาน
การกำหนดเส้นทาง URI ที่มีผลผูกพันกับ URL ที่มีคุณสมบัติครบถ้วน
มีหนังสือที่เกี่ยวข้อง
ข้อบกพร่อง
เส้นโค้งการเรียนรู้ที่สูงชันมาก
ชุมชนปิดเปิดแม้บน stackoverflow
ไม่ได้รับความนิยมอีกต่อไปเพราะการเล่นเฟรมเวิร์กและเสื้อ
ตัวอย่าง
คลาสสาธารณะ Part03 ขยาย ServerResource {โมฆะคงที่สาธารณะหลัก (String [] args) โยนข้อยกเว้น {// สร้างเซิร์ฟเวอร์ HTTP และฟังบนพอร์ต 8182 เซิร์ฟเวอร์ใหม่ (Protocol.http, 8182, Part03. คลาส) .start (); } @get ("txt") สตริงสาธารณะ toString () {return "hello, world"; -หมายเหตุ <br /> แม้ว่าเฟรมเวิร์กนี้ได้รับความนิยมตลอดเวลา แต่ฉันไม่สามารถให้มันได้ 5 ดาวให้กับมันและความสำเร็จในปัจจุบัน
restx
เวลาเกิด: 2013
คะแนน: 3.5/5
RESTX เป็นเฟรมเวิร์ก Java REST แบบโอเพนซอร์สที่มีน้ำหนักเบา
ลิงค์ <br /> เว็บไซต์อย่างเป็นทางการเอกสาร GitHub
ข้อได้เปรียบ
เร็วน้ำหนักเบา
ง่ายต่อการสร้าง
microframework จริง
เป็นแบบแยกส่วน
สนับสนุนห้องสมุดอื่น ๆ
สนับสนุน MongoDB
ข้อบกพร่อง
เอกสารที่สับสนไม่เป็นมิตร ฉันคาดหวังเอกสารที่ดีกว่าสำหรับกรอบประเภทนี้
เด็กเกินไป
asynchronous async ยังไม่ได้รับการสนับสนุน
ตัวอย่าง
@get ("/message/{id}") ข้อความสาธารณะ sayshello (string id, // path param string who // query param) {ส่งคืนข้อความใหม่ (). setMessage (string.format ("สวัสดี %s, %s", ใคร, datetime.now () } @post ("/message/{id}") ข้อความสาธารณะ sayshello (string id, // path param message ข้อความ // body param) {return msg.setMessage (string.format (" %s @ %s", msg.getMessage (); -หมายเหตุ <br /> พูดตามตรงฉันไม่ได้ใช้เวลากับกรอบนี้มากนัก มันไม่คุ้มค่าที่จะใช้ความพยายามมากเกินไปในกรอบงานอื่นฉันหมายถึงตลาด Java Framework กำลังแยกส่วนมากขึ้นเรื่อย ๆ เช่นเดียวกับตลาด JavaScript แนวโน้มนี้ควรหยุดลง
กรอบประกาย
เวลาเกิด: 2011
คะแนน: 3.5/5
อย่าสับสนกับ Framework Big Data ของ Apache, Spark Framework ที่นี่เป็นกรอบเว็บ Java ที่มีน้ำหนักเบาสำหรับการพัฒนาอย่างรวดเร็ว (50% ของผู้ใช้ Spark ใช้ Spark เพื่อสร้าง REST APIs) มันได้รับแรงบันดาลใจจากกรอบทับทิมซินาตร้า
มันมีเคอร์เนลน้อยที่สุดน้อยกว่า 1 เมตรและให้คุณสมบัติพื้นฐานทั้งหมดเพื่อสร้างเว็บแอปพลิเคชันที่พักผ่อนหรือแบบดั้งเดิม
ลิงค์ <br /> เว็บไซต์อย่างเป็นทางการเอกสาร GitHub
ข้อได้เปรียบ
เร็วน้ำหนักเบา
ต้นแบบที่ยอดเยี่ยมอย่างรวดเร็ว
ง่ายต่อการสร้าง
มักใช้กับ angularjs
microframework จริง
ใช้ท่าเทียบเรือ
สามารถใช้ในภาชนะหรือทำงานได้อย่างอิสระ
ข้อบกพร่อง
เอกสารจะดีกว่าไม่เหมาะสำหรับผู้เริ่มต้น
ไม่เหมาะสำหรับโครงการขนาดใหญ่
ชุมชนเล็ก
ตัวอย่าง
นำเข้า Spark.Spark.*; ชั้นเรียนสาธารณะ HelloWorld {โมฆะสาธารณะคงที่หลัก (String [] args) {get ("/hello", (req, res) -> "Hello World"); -หมายเหตุ <br /> เฟรมเวิร์กนี้เหมาะสำหรับการพัฒนาเบื้องต้น ส่วนใหญ่ใช้เป็นโครงการขนาดเล็กหรือต้นแบบ