เรากำลังพัฒนาเซิร์ฟเวอร์ด้วย REST API ซึ่งยอมรับและตอบกลับด้วย JSON ปัญหาคือถ้าคุณต้องการอัปโหลดภาพจากลูกค้าไปยังเซิร์ฟเวอร์
หมายเหตุ: และฉันกำลังพูดถึงกรณีใช้งานที่เอนทิตี (ผู้ใช้) สามารถมีหลายไฟล์ (carPhoto, licensePhoto) และยังมีคุณสมบัติอื่น ๆ (ชื่ออีเมล ... ) แต่เมื่อคุณสร้างผู้ใช้ใหม่คุณไม่ต้อง ไม่ต้องส่งภาพเหล่านี้พวกเขาจะถูกเพิ่มหลังจากกระบวนการลงทะเบียน
แนวทางแก้ไขที่ฉันทราบ แต่แต่ละข้อมีข้อบกพร่อง
1. ใช้ multipart / form-data แทน JSON
ดี : คำขอ POST และ PUT นั้นสงบที่สุดเท่าที่จะเป็นไปได้พวกเขาสามารถมีอินพุตข้อความพร้อมไฟล์ได้
ข้อเสีย : มันไม่ใช่ JSON อีกต่อไปซึ่งง่ายต่อการทดสอบการดีบักและอื่น ๆ เปรียบเทียบกับหลายส่วน / แบบฟอร์มข้อมูล
2. อนุญาตให้อัปเดตไฟล์แยกต่างหาก
คำขอ POST สำหรับการสร้างผู้ใช้ใหม่ไม่อนุญาตให้เพิ่มรูปภาพ (ซึ่งเป็นสิ่งที่เราใช้ในกรณีที่ฉันพูดตอนเริ่มต้น) การอัปโหลดรูปภาพทำได้โดยการร้องขอ PUT เป็นหลายส่วน / แบบฟอร์มข้อมูลตัวอย่าง / users / 4 / carPhoto
ดี : ทุกอย่าง (ยกเว้นการอัปโหลดไฟล์เอง) ยังคงอยู่ใน JSON มันเป็นเรื่องง่ายในการทดสอบและแก้ไขข้อบกพร่อง (คุณสามารถบันทึกคำขอ JSON ทั้งหมดโดยไม่ต้องกลัวความยาว)
ข้อเสีย : มันไม่ง่ายคุณไม่สามารถ POST หรือ PUT ตัวแปรทั้งหมดของเอนทิตีในครั้งเดียวและที่อยู่นี้/users/4/carPhoto
อาจถือได้ว่าเป็นคอลเลกชัน (กรณีการใช้งานมาตรฐานสำหรับ REST API จะมีลักษณะเช่นนี้/users/4/shipments
) โดยปกติคุณไม่สามารถ (และไม่ต้องการ) รับ / วางเอนทิตีแต่ละตัวแปรของเอนทิตีเช่นผู้ใช้ / 4 / ชื่อ คุณสามารถรับชื่อด้วย GET และเปลี่ยนเป็น PUT ได้ที่ users / 4 หากมีบางสิ่งบางอย่างหลังจากรหัสมันมักจะเป็นคอลเลกชันอื่นเช่นผู้ใช้ / 4 / ความคิดเห็น
3. ใช้ Base64
ส่งเป็น JSON แต่เข้ารหัสไฟล์ด้วย Base64
ดี : เช่นเดียวกับวิธีแก้ปัญหาแรกเป็นบริการที่สงบเงียบที่สุด
ข้อด้อย : อีกครั้งการทดสอบและการดีบักจะแย่กว่ามาก (ร่างกายสามารถมีเมกะไบต์ของข้อมูล) มีการเพิ่มขนาดและเวลาในการประมวลผลทั้งลูกค้าและเซิร์ฟเวอร์
ฉันต้องการใช้โซลูชันไม่มี 2 แต่มันมีข้อเสีย ... ทุกคนสามารถให้ข้อมูลเชิงลึกเกี่ยวกับโซลูชันที่ดีที่สุดได้อย่างไร
เป้าหมายของฉันคือการให้บริการที่สงบด้วยมาตรฐานรวมมากที่สุดในขณะที่ฉันต้องการให้มันง่ายที่สุด