RESTful API ควรจะสามารถส่งคืนไฟล์หรือเพียงแค่ตำแหน่ง


12

นี่ทำให้ฉันงุนงงมาระยะหนึ่งแล้ว

ตัวอย่างเช่นเรามี REST API ที่ให้เนื้อหาพื้นฐานไปยังระบบการบริโภคและการผลิต JSON ที่จุดสิ้นสุดนี้จะสร้าง URL ให้กับรูปภาพและคำอธิบายและพบได้ดังนี้: // localhost / myApi / pictures / 1

{
    id: 1,
    description: "This is a pretty picture of a daisy",
    URL: <OUR URL>
}

ตอนนี้ OUR_URL ควรชี้ไปที่ตำแหน่งบน API เช่น // localhost / myApi / files / pictures / 1 ซึ่งส่งคืน JPG (แอปพลิเคชันด้านหลัง API อ่านเนื้อหาทางกายภาพของไฟล์แล้วสตรีมกลับไปยังไคลเอนต์ ) สิ่งนี้แตกต่างอย่างชัดเจนกับส่วนที่เหลือของ API ซึ่งสร้างการตอบสนอง JSON และจะมีค่าใช้จ่ายจากการอ่านและการสตรีมไฟล์จริง

อีกทางหนึ่ง OUR_URL ควรชี้ไปที่ URL ที่อยู่นอกขอบเขตของบริการ REST ดังนั้น //localhost/files/pictures/1.jpg ซึ่งเป็นไฟล์ที่อ่านไฟล์โดยตรง

ดังนั้นคำถามคือ:

RESTful API ควรจะส่งคืนไฟล์หรือเพียงแค่ตำแหน่ง


1
คุณตระหนักดีว่าคำอธิบายทั่วไปของ REST คือจำนวนใดที่ "ลูกค้าร้องขอไปยัง URL และเซิร์ฟเวอร์ส่งคืนข้อมูล" ใช่ไหม แนวคิดทั้งหมดคือ REST นั้นมีการกำหนดอย่างเข้มงวดมากและสามารถปรับให้เข้ากับรูปแบบการดึง URL ได้เกือบทุกแบบ

คำตอบ:


17

เซอร์วิส RESTful ควรจัดเตรียมรีซอร์สให้กับผู้ใช้ของ API ทรัพยากรสามารถมีรูปแบบที่หลากหลายซึ่งมีตั้งแต่ JSON หรือ XML เป็น JPEG และ HTML

ไม่มีแม้แต่ความต้องการหรือแม้แต่ความคาดหวังว่า API เดียวให้บริการเฉพาะทรัพยากรในรูปแบบเดียวเท่านั้น มีอะไรผิดปกติกับการให้บริการเอกสาร JSON บน URI เป็น/myApi/pictures/1และรูปแบบไฟล์ JPEG /myApi/files/pictures/1URI
ในกรณีที่รุนแรงยิ่งกว่านั้นก็เป็นไปได้ที่จะให้บริการทั้งคำอธิบาย JSON และไฟล์ JPEG จาก URL เดียวกันทั้งนี้ขึ้นอยู่กับรูปแบบที่ผู้ร้องขอร้องขอ


7

ปัญหาหนึ่งที่คุณมีในการส่งคืน URIs ก็คือไฟล์เซิร์ฟเวอร์เก่าธรรมดาไม่สามารถรักษาความปลอดภัยได้ ดังนั้นหากคุณต้องการ จำกัด ข้อ จำกัด ใด ๆ เกี่ยวกับผู้ที่สามารถเข้าถึงไฟล์ได้คุณจะต้องสามารถส่งคืนไฟล์นั้นได้ใน REST API โดยตรง (หรือไม่หากผู้ใช้ไม่มีสิทธิ์ไฟล์จะเป็น ไม่อยู่ในสถานะที่ถูกต้อง ฯลฯ )

ไม่เช่นนั้นการส่งคืน URI แบบเก่าธรรมดาและให้การไปที่ CDN เฉพาะนั้นมีประโยชน์มากมายเกี่ยวกับการจัดสรรความเรียบง่ายและความสามารถในการปรับขนาด - สมมติว่านั่นคือทั้งหมดที่คุณต้องทำ


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