Scala framework สำหรับ Rest API Server? [ปิด]


105

เรากำลังคิดที่จะย้ายเซิร์ฟเวอร์ Rest API ของเรา (อยู่ในบริการเว็บบน Symfony PHP) ไปยัง Scala ด้วยเหตุผลหลายประการ: ความเร็วไม่มีค่าใช้จ่าย CPU น้อยรหัสน้อยความสามารถในการปรับขนาด ฯลฯ ฉันไม่รู้จัก Scala จนกระทั่งหลาย ๆ หลายวันก่อน แต่ฉันสนุกกับสิ่งที่ได้เรียนรู้ในวันนี้ด้วยหนังสือ Scala และบล็อกโพสต์และคำถามทั้งหมด (มันไม่ได้น่าเกลียดเท่าไหร่!)

ฉันมีตัวเลือกดังต่อไปนี้:

  • สร้างเซิร์ฟเวอร์ Rest API ตั้งแต่เริ่มต้น
  • ใช้เฟรมเวิร์กเว็บ Scala เล็ก ๆ เช่นScalatra
  • ใช้ลิฟท์

บางสิ่งที่ฉันจะต้องใช้: คำขอ HTTP, เอาต์พุต JSON, MySQL (ข้อมูล), OAuth, Memcache (แคช), บันทึก, การอัปโหลดไฟล์, สถิติ (อาจเป็น Redis)

คุณจะแนะนำอะไร

คำตอบ:


88

ไม่เรียงตามลำดับ:


1
ขอบคุณ! ฉันจะตรวจสอบ AKKA เนื่องจากดูเหมือนว่าจะเบาและปรับขนาดได้มาก
fesja

1
หมายเหตุฉันหวังว่าจะมีใครบางคนเข้ามารวมหรือย้ายrestfulie.caelum.com.brไปยัง Scala ตัวเลือกหนึ่งในตอนนี้คือการใช้ Restfulie เป็นส่วนหน้าของ Scala บน JRuby
oluies

3
+1 ฉันใช้ Akka ในที่ทำงานเพื่อขับเคลื่อนเซิร์ฟเวอร์ API ประสิทธิภาพสูง ข้อเสียของการใช้ JAX-RS กับ Akka คือ JAX-RS มาพร้อมกับความแปลกใหม่ของ Java จำนวนมากซึ่งไม่เหมาะกับโครงการ Pure-Scala ถึงกระนั้น Akka ก็ทำให้ข้อตกลงทั้งหมดคุ้มค่า
สูงสุดอ.

2
Akka เป็นทางเลือกที่ดี หากคุณให้บริการ JSON โปรดดูที่ Lift JSON คุณสามารถมิกซ์แอนด์แมทช์ได้ไม่มีปัญหา
andyczerwonka

1
@santiagobasult ขอบอกว่าเล่น! 2.0 และ Play-mini! 2.0 เกิดขึ้น
ถึง


15

ลองดูที่Xitrum (ฉันเป็นคนเขียน) มันมีทุกอย่างที่คุณระบุไว้ เอกสารค่อนข้างกว้างขวาง จาก README:

Xitrum เป็นเฟรมเวิร์กเว็บและเว็บเซิร์ฟเวอร์ Scala แบบ async และคลัสเตอร์ที่อยู่ด้านบนของ Netty และ Hazelcast:

  • คำอธิบายประกอบถูกใช้สำหรับเส้นทาง URL ตามเจตนารมณ์ของ JAX-RS คุณไม่จำเป็นต้องประกาศเส้นทางทั้งหมดในที่เดียว
  • Async ในจิตวิญญาณของ Netty
  • เซสชันสามารถเก็บไว้ในคุกกี้หรือกลุ่ม Hazelcast
  • แคชในกระบวนการและคลัสเตอร์คุณไม่จำเป็นต้องมีเซิร์ฟเวอร์แคชแยกกัน
  • Comet ในกระบวนการและคลัสเตอร์คุณไม่จำเป็นต้องมีเซิร์ฟเวอร์ Comet แยกต่างหาก

7

ฉันจะเพิ่มอีกสองตัวเลือก: akka พร้อมการรองรับ JAX-RS ในตัวและเพียงแค่ใช้ JAX-RS โดยตรง (อาจเป็นการใช้งาน Jersey) ในขณะที่เนื้อหา "Scala-y" น้อยกว่าเนื้อหาอื่น ๆ (อาศัยคำอธิบายประกอบเพื่อผูกพารามิเตอร์และเส้นทาง) JAX-RS เป็นความสุขที่ได้ใช้แก้ปัญหาทั้งหมดของการเข้ารหัสบริการเว็บโดยใช้พื้นที่น้อยที่สุด ฉันไม่ได้ใช้มันผ่าน akka ฉันคาดว่ามันจะยอดเยี่ยมที่นั่นได้รับความสามารถในการปรับขนาดที่น่าประทับใจผ่านการใช้งานตามความต่อเนื่อง


ขอบคุณ! ฉันจะตรวจสอบ AKKA กับ JAX-RS เป็น @Brent และคุณพูด ดูเหมือนว่าจะเบามากและมีรอยเท้าน้อยซึ่งสำคัญมากสำหรับ API หากคุณต้องการที่จะดำเนินการอย่างรวดเร็ว
fesja

1
คุณจะต้องใช้ JAX-RS 2.0 (ซึ่งปัจจุบันเป็นรุ่นเบต้า) เพื่อให้สามารถปรับขนาดได้เนื่องจากเวอร์ชันเก่าต้องอาศัย threadlocal ที่น่ารังเกียจ (นั่นคือการหยุดเธรดชั่วคราวและไม่รองรับการเริ่มต้นใหม่)
Adam Gent

4

ดูFinchซึ่งเป็นไลบรารี Combinator Scala สำหรับสร้างบริการFinagle HTTP Finch ช่วยให้คุณสร้างจุดสิ้นสุด HTTP ที่ซับซ้อนจากจำนวนบล็อกพื้นฐานที่กำหนดไว้ล่วงหน้า เช่นเดียวกับ parser combinators จุดสิ้นสุดของ Finch นั้นง่ายต่อการใช้ซ้ำเขียนทดสอบและให้เหตุผล


3

คำตอบที่ดีทั้งหมดจนถึงตอนนี้ จุดหนึ่งที่ลิฟท์โปรดปรานคือRestHelperซึ่งสามารถทำให้ง่ายต่อการเขียนวิธี API สั้น ๆ ที่สวยงาม นอกจากนี้สิ่งอื่น ๆ ทั้งหมดที่คุณต้องการทำควรตรงไปตรงมาเพื่อนำไปใช้ใน Lift ดังที่กล่าวไว้ Memcache อาจไม่จำเป็น


ขอบคุณ! ทำไมคุณไม่คิดว่า memcache จำเป็น? แน่นอนว่ามันขึ้นอยู่กับ แต่เรามีคำถามมากมายที่มีแนวโน้มว่าจะต้องทำอย่างต่อเนื่องดังนั้นถึงเวลาที่เราจะชนะและโหลดฐานข้อมูลน้อยลง
fesja

ฉันเพิ่งจะออกจากสิ่งที่ David Pollak พูดเมื่อวานนี้ โดยทั่วไปการแคชภายในลิฟท์จะลบเมมแคชกรณีการใช้งานจำนวนมากออกไป นี่คือข้อความของเขาและมีโพสต์อื่น ๆ อีกสองสามรายการในชุดข้อความเกี่ยวกับ memcache: groups.google.com/group/scala-base/msg/4b11cbd357bfecf0
pr1001

2

ล่าช้าเล็กน้อยในฉาก แต่ฉันขอแนะนำให้ใช้Bowler framework เพื่อสร้าง REST API มีขนาดเล็กตรงประเด็นและรองรับการแปลงคลาสเคสอัตโนมัติ!

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