ข้อมูลเบื้องต้นเกี่ยวกับ REST API แนวทางปฏิบัติที่ดีที่สุดในการออกแบบคำอธิบาย Rest API ของ REST API

โกลอฟนา / รายชื่อผู้ติดต่อ
อินเทอร์เน็ตส่วนรัสเซียมีบทความจำนวนมากเกี่ยวกับบริการเว็บที่ใช้ SOAP และ XML-RPC แต่คงไม่มีอะไรเกี่ยวกับสถาปัตยกรรม REST ทั่วโลก (หรือในวงกว้างน้อยกว่า)

บทความนี้จะอธิบายพื้นฐานของสถาปัตยกรรมนี้ ความเป็นไปได้ และการใช้งาน

ส่วนที่เหลือคืออะไร?

REST (การถ่ายโอนสถานะการเป็นตัวแทน) คือรูปแบบของสถาปัตยกรรมซอฟต์แวร์สำหรับระบบแบบกระจาย เช่น เวิลด์ไวด์เว็บ ซึ่งใช้เพื่อเรียกใช้บริการเว็บ คำว่า REST ได้รับการประกาศเกียรติคุณมากกว่า 2,000 ครั้งโดย Roy Fielding หนึ่งในผู้เขียนโปรโตคอล HTTP ระบบที่รองรับ REST เรียกว่าระบบ RESTful

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

และตอนนี้ชัดเจนที่สุด:

การมีการค้นหาภายในเพิ่มเติมหมายถึงการถ่ายโอนข้อมูลในลักษณะเดียวกับข้อมูลนั้นเอง โตโต้ เราไม่เบิร์นข้อมูลลงใน XML เช่นเดียวกับ SOAP และ XML-RPC ห้ามใช้ AMF เช่นเดียวกับ Flash ฯลฯ เราแค่ให้ข้อมูลเอง

ข้อมูลแต่ละชิ้นจะถูกระบุโดยไม่ซ้ำกันด้วย URL ซึ่งหมายความว่า URL นั้นเป็นคีย์หลักสำหรับข้อมูลนั้น โตโต้ เช่น หนังสือเล่มที่สามในหนังสือตำรวจจะหน้าตาเป็น /book/3 และหน้าที่ 35 ในหนังสือเล่มนี้จะหน้าตาเป็น /book/3/page/35 Zvіdsi y รูปแบบงานทางออก ยิ่งไปกว่านั้นไม่สำคัญว่าข้อมูลจะอยู่ในรูปแบบใดตามที่อยู่ /book/3/page/35 - อาจเป็น HTML, สำเนาที่สแกนเป็นไฟล์ jpeg หรือเอกสาร Microsoft Word

วิธีการจัดการข้อมูลโดยบริการจะขึ้นอยู่กับโปรโตคอลการถ่ายโอนทั้งหมด โปรโตคอลที่ทันสมัยที่สุดคือ HTTP อย่างเห็นได้ชัด ดังนั้นสำหรับ HTTP การดำเนินการกับข้อมูลจะถูกกำหนดโดยวิธีการต่อไปนี้: GET (ลบ), PUT (เพิ่ม, แทนที่), POST (เพิ่ม, เปลี่ยนแปลง, ลบ), DELETE (ลบแล้ว) ดังนั้น การดำเนินการ CRUD (สร้าง-อ่าน-Updtae-Delete) สามารถทำได้โดยใช้วิธีการต่างๆ มากมาย รวมถึง GET และ POST

เพลามีลักษณะเหมือนที่ก้น:

GET /book/ - ดึงรายการหนังสือที่มีอยู่ทั้งหมด
GET /book/3/ - รับเล่มที่ 3
PUT /book/ - เพิ่มหนังสือ (ข้อมูลจากผู้ใช้)

DELETE /book/3 – ดูหนังสือ

นอกจากนี้ที่สำคัญ:สิ่งเหล่านี้เรียกว่า REST-Patterns ซึ่งเกี่ยวข้องกับวิธี HTTP ที่ต้องใช้งานไม่ได้ ยิ่งใกล้บ้านมากขึ้น รุ่นต่างๆ จะมอง POST และ PUT ในรูปแบบที่ต่างกัน อย่างไรก็ตาม PUT ไม่ได้ถูกกำหนดไว้สำหรับการสร้าง เล่นซ้ำ และอัปเดต แต่สำหรับ POST นั้นไม่มีการกำหนดไว้ (การดำเนินการ POST เป็นแบบทั่วไปมากและไม่สามารถแนบความหมายเฉพาะเข้าไปได้)- ดังนั้นตัวอย่างของฉันจะถูกต้องในรูปแบบนี้ และราวกับว่าคุณหมายถึง POST และ PUT สลับกันได้

อีกครั้ง POST สามารถเปลี่ยนแปลงได้พร้อมกันสำหรับการเปลี่ยนแปลงทั้งหมด:
POST /book/ – เพิ่มหนังสือ (ขอข้อมูล)
POST /book/3 – เปลี่ยนหนังสือ (ข้อมูลจะถูกร้องขอ)
POST /book/3 – ลบหนังสือ (เนื้อหาจะว่างเปล่า)

วิธีนี้ช่วยให้คุณละเว้นช่วงเวลาที่ไม่พึงประสงค์ที่เกี่ยวข้องกับปัญหา PUT และ DELETE ได้ในบางครั้ง

REST wiki สำหรับบริการบนเว็บทุกวัน

ดังที่คุณทราบ บริการเว็บเป็นส่วนเสริมที่ทำงานบนเวิลด์ไวด์เว็บ และเข้าถึงได้ผ่านโปรโตคอล HTTP และการแลกเปลี่ยนข้อมูลอยู่ในรูปแบบ XML เพิ่มเติม ดังนั้นรูปแบบของข้อมูลที่ถ่ายโอนไปยังเนื้อหาจะเป็น XML เสมอ

สำหรับหน่วยข้อมูลผิวหนัง จะมีการระบุการดำเนินการ 5 รายการ และสำหรับตัวคุณเอง:

รับข้อมูล/ (ดัชนี)- แสดงรายการวัตถุทั้งหมด เรียกร้องการให้อภัยก็แค่นั้นแหละ วางเฉพาะช่องตัวระบุและชื่อออบเจ็กต์ โดยไม่มีข้อมูลอื่น

รับ /ข้อมูล/(id) (ดู)- ดึงข้อมูลเพิ่มเติมเกี่ยวกับวัตถุ

ใส่ /ข้อมูล/หรืออย่างอื่น โพสต์ /ข้อมูล/ (สร้าง)- ฉันกำลังสร้างวัตถุใหม่ ข้อมูลจะถูกส่งผ่านร่างกายโดยไม่มีการเข้ารหัสอย่างเป็นทางการ โดยใช้ urlencode ใน PHP เนื้อความสามารถเขียนได้ดังนี้:

ฟังก์ชัน getBody() (
ถ้า (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
ส่งคืน $HTTP_RAW_POST_DATA;
}

โพสต์ /ข้อมูล/(id)หรืออย่างอื่น ใส่ /ข้อมูล/(id) (แก้ไข)– เปลี่ยนแปลงข้อมูลด้วยตัวระบุ (id) ซึ่งอาจแทนที่ข้อมูลเหล่านั้นได้ ข้อมูลจะถูกส่งไปในส่วนของคำขอด้วย แต่ในโหมด PUT มีความแตกต่างที่สำคัญ ทางด้านขวา คำขอ POST จะส่งการมีอยู่ของ urldecoded-post-data โตโต้ หากคุณไม่ทำให้โค้ดค้าง ก็ไม่ละเมิดมาตรฐาน ที่นี่ไม่ว่าพวกเขาต้องการใครก็ตาม พวกเขาไม่ได้แสดงความเคารพต่อมาตรฐาน พวกเขายังคงรักษามาตรฐานไว้ราวกับว่าพวกเขาเป็นผู้หลังการเปลี่ยนแปลง

ลบ /ข้อมูล/(id) (ลบ)– ลบข้อมูลจากตัวระบุ (id)

ฉันขอชี้ให้เห็นอีกครั้งว่าในแอปพลิเคชันของเรา /info/ - มันสามารถขึ้นอยู่กับข้อมูลอื่น ๆ ที่สามารถ (และอาจ) แสดงใน URL:

/data/4/otherdata/6/info/3/ … แค่นั้นแหละ.

สิ่งที่คุณจะได้รับจากแนวคิดนี้:

เห็นได้ชัดว่าสถาปัตยกรรม REST นั้นง่ายมากในแง่ของการพัฒนา เมื่อดูที่พร้อมท์ คุณสามารถบอกได้ว่าอะไรกำลังทำงานอยู่โดยไม่ต้องเข้าใจรูปแบบ (สำหรับ SOAP, XML-RPC) ข้อมูลจะถูกถ่ายโอนโดยไม่จัดเก็บข้อมูลเพิ่มเติม ดังนั้น REST จึงถือว่าใช้ทรัพยากรน้อยกว่า เนื่องจากไม่จำเป็นต้องแยกวิเคราะห์เพื่อทำความเข้าใจว่าจะต้องทำอะไร และไม่จำเป็นต้องถ่ายโอนข้อมูลจากรูปแบบหนึ่งไปยังอีกรูปแบบหนึ่ง

ใช้งานได้จริงมากกว่าความเมื่อยล้า

ข้อได้เปรียบหลักของบริการคือสามารถประมวลผลได้โดยระบบ ไม่ว่าจะเป็นเว็บไซต์ แฟลช โปรแกรม ฯลฯ ส่วนของวิธีการแยกวิเคราะห์คำขอ XML และ vykonannya สำหรับ HTTP จะมีอยู่ในอนาคตอันใกล้นี้

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

REST API (Representational State Transfer) หรือเว็บเซอร์วิส RESTful คืออะไร? REST แปลจากภาษาอังกฤษว่า "การถ่ายทอดผ่านตัวแทนไปยังสแตน" นี่เป็นวิธีการสร้างความมั่นใจในการโต้ตอบระหว่างระบบคอมพิวเตอร์บนอินเทอร์เน็ต บริการเว็บที่ใช้ REST ซึ่งช่วยให้ระบบที่ใช้ ปฏิเสธการเข้าถึงทรัพยากรบนเว็บแบบข้อความ และจัดการ vikoryst และการดำเนินการแบบครบวงจร สำรวจบริการเว็บรูปแบบอื่นๆ ที่รวมพลังเข้ากับชุดการดำเนินการเพิ่มเติม เช่น WSDL และ SOAP

REST API: มันคืออะไร? ฉันเข้าใจ

ทรัพยากรบนเว็บส่วนใหญ่จะถูกระบุจากเวิลด์ไวด์เว็บเป็นเอกสารหรือไฟล์ที่ระบุโดย URL กลิ่นเหม็นของวันนี้อาจมีความหมายที่คลุมเครือและเป็นนามธรรมมากกว่า ซึ่งมีกลิ่นของวัตถุผิวหนังและความเป็นจริง ซึ่งสามารถระบุ ตั้งชื่อ กล่าวถึง และรวบรวมได้ใน Merezhi บริการเว็บ REST API ขอการตอบสนองในทรัพยากร URI ซึ่งสามารถจัดรูปแบบเป็น XML, HTML, JSON หรือรูปแบบอื่น ๆ คุณสามารถยืนยันได้ว่ามีการเปลี่ยนแปลงเกิดขึ้นกับทรัพยากรที่กำลังบันทึก ตลอดจนส่งข้อความไฮเปอร์เท็กซ์ไปยังทรัพยากรอื่นๆ ที่เกี่ยวข้องและคอลเลกชันของพวกเขา การใช้ HTTP เป็นโปรโตคอลที่ขยายมากที่สุด ขยายไปถึงประเภทของการดำเนินการที่มีอยู่ซึ่งระบุโดยคำสั่ง PUT, DELETE, HTTP GET, POST

โปรโตคอลแห่งชัยชนะที่ไม่มีการควบคุมจะกลายเป็นการทำงานมาตรฐาน ระบบ REST มุ่งเป้าไปที่การเพิ่มผลผลิต ความน่าเชื่อถือ และความพร้อมใช้งานเพื่อการเติบโตของส่วนประกอบ vikoristan ซ้ำ ๆ ซึ่งสามารถใช้ได้และสามารถอัปเดตได้โดยไม่ต้องติดโอห์มของระบบ เว็บไซต์ REST มักจะเรียบง่ายกว่าและมีความสำคัญน้อยกว่าในรูปแบบ SOAP (Simple Object Access Protocol) ในขณะที่เครือข่าย REST ไม่มีค่าใช้จ่ายแบนด์วิธเท่ากัน ทำให้เหมาะสำหรับเว็บไซต์บนอินเทอร์เน็ตมากกว่า สำหรับแนวทาง SOAP คุณต้องเขียนหรือสร้างโปรแกรมเซิร์ฟเวอร์ (สำหรับการให้บริการข้อมูล) และโปรแกรมไคลเอนต์ (สำหรับการจัดเก็บข้อมูล)

ประวัติความเป็นมาของเทคโนโลยี

คำว่า "การโอนตัวแทนไปยังประเทศ" ได้รับการแนะนำและประกาศเกียรติคุณในปี 2000 โดย Roy Fielding ในวิทยานิพนธ์ของเขา "รูปแบบสถาปัตยกรรมและการออกแบบสถาปัตยกรรมซอฟต์แวร์ที่ทันสมัย" เราพัฒนารูปแบบสถาปัตยกรรมของ REST ควบคู่ไปกับ HTTP 1.1 1996-1999 ตามโครงการหลัก HTTP 1.0 1996 เมื่อมองย้อนหลังเกี่ยวกับการพัฒนาเทคโนโลยี Fielding กล่าวว่าในระหว่างกระบวนการกำหนดมาตรฐาน HTTP นั้นมีแนวโน้มที่จะขโมยตัวเลือกการออกแบบบนอินเทอร์เน็ต นี่เป็นกระบวนการที่ซับซ้อนมากภายในกรอบของกระบวนการที่ยอมรับข้อเสนอจากใครก็ตามในหัวข้อที่ว่าสวีเดนกลายเป็นศูนย์กลางของกาลูซานี้ได้อย่างไร

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

ข้อดี

ลักษณะเฉพาะของสไตล์ REST เกิดจากหลักการทางสถาปัตยกรรมดังต่อไปนี้:

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

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

ขอบเขตที่เป็นทางการและสถาปัตยกรรม

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

ขอบเขตแรกถูกนำไปใช้กับรูปแบบสถาปัตยกรรมไคลเอนต์-เซิร์ฟเวอร์ การลดปัญหาอินเทอร์เฟซไคลเอนต์และปัญหาในการบันทึกข้อมูลจะปรับปรุงความสามารถในการพกพาอินเทอร์เฟซไคลเอนต์บนหลายแพลตฟอร์ม นอกจากนี้ยังปรับปรุงความสามารถในการปรับขนาดด้วยการลดความซับซ้อนของส่วนประกอบเซิร์ฟเวอร์ บางทีสิ่งที่สำคัญที่สุดสำหรับ Merezha ก็คือช่วยให้ส่วนประกอบต่างๆ พัฒนาได้อย่างอิสระ ดังนั้นจึงทำให้สามารถขยายขนาดอินเทอร์เน็ตไปจนถึงโดเมนองค์กรขนาดใหญ่ได้

ความปลอดภัย

REST ไม่ได้ให้การสนับสนุนด้านความปลอดภัยที่จำเป็น นี่เป็นสิ่งสำคัญอย่างยิ่งเมื่อออกแบบบริการเว็บ REST - ต้องคำนึงถึงความปลอดภัยและการออกแบบด้วย บริการเว็บ REST ใช้ HTTP PUT และ DELETE ด้วยการดำเนินการ CRUD PUT และ DELETE ไม่ได้รับการสนับสนุนในเบราว์เซอร์จำนวนมาก และส่วนใหญ่มักจะเชื่อมต่อกับเซิร์ฟเวอร์เพียร์ เนื่องจากความเป็นไปได้ที่จะส่งผลต่อการรักษาความลับ หากไม่มีการตั้งค่าที่เหมาะสมระหว่างเซิร์ฟเวอร์และไคลเอนต์ ไคลเอนต์บุคคลที่สามสามารถสร้างทรัพยากรโดยใช้วิธี PUT หรือใช้ทรัพยากร DELETE ในช่วงระยะเวลาการพัฒนา เป็นไปได้ที่จะรับประกันความปลอดภัยสำหรับบริการบนเว็บและให้แน่ใจว่าช่วงเวลาเหล่านี้ได้รับการปกป้อง

องค์ประกอบทางสถาปัตยกรรม

ลักษณะสำคัญของ REST คือลักษณะขององค์ประกอบข้อมูล สไตล์ REST มีแนวคิดหลายประการที่อธิบายพฤติกรรมและการผลิตข้อมูล

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

URI – ระบุทรัพยากรโดยไม่ซ้ำกัน พารามิเตอร์นี้เปลี่ยนทรัพยากรที่อยู่และอาจเปลี่ยนแปลงได้ มีการแลกเปลี่ยนทรัพยากรสำหรับโปรแกรมที่รองรับโปรโตคอล เช่น HTTP

Podannya - ฉันจะกลายเป็นทรัพยากรในขณะนี้ ลูกค้าส่งคืนคำขอไปยังทรัพยากรตามด้วย URI สามารถดูทรัพยากรได้ในรูปแบบอย่างน้อยหนึ่งรูปแบบที่ส่ง เช่น XML, HTML, JSON, RSS, REST API java รูปแบบเหล่านี้สามารถรองรับได้ด้วยกลไกเพิ่มเติมสำหรับการปรับปรุงเนื้อหา

การให้สิทธิ์ - อนุญาตให้โปรแกรมยกเลิกการเปลี่ยนจากสถานะหนึ่งไปอีกสถานะหนึ่ง ทรัพยากรแต่ละรายการอาจมีการเชื่อมต่อกับทรัพยากรอื่น ปัจจุบันอาจยืนยันการตรากฎหมายสำหรับการเปลี่ยนแปลงที่จะเกิดขึ้น โปรแกรมที่เชื่อมต่ออย่างดีทำให้ผู้ใช้สามารถเปิดอินเทอร์เฟซได้อย่างอิสระ

ตัวเชื่อมต่อ

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

ไคลเอ็นต์และเซิร์ฟเวอร์เป็นตัวเชื่อมต่อ REST หลัก ไคลเอนต์เริ่มต้นคำขอ และเซิร์ฟเวอร์ประมวลผลคำขอนั้น

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

ส่วนประกอบ

ส่วนประกอบต่างๆ ได้รับการประกอบโดยใช้วิธีการทรัพยากรที่กำหนดไว้อย่างเคร่งครัด ซึ่งสร้างเงื่อนไขสำหรับการจัดเก็บการผลิตและโรงงานขนย้าย

User-Agent – ​​​​การเชื่อมต่อไคลเอ็นต์ vikoryst สำหรับการเริ่มต้นคำขอ

เซิร์ฟเวอร์ต้นทาง – ตัวเชื่อมต่อเซิร์ฟเวอร์ Vikorist สำหรับแหล่งจ่ายไฟ

พร็อกซีเป็นตัวกลางที่ใช้ในฝั่งไคลเอ็นต์เพื่อห่อหุ้มอินเทอร์เฟซกับบริการอื่นๆ รวมถึงการแปลข้อมูลและการป้องกันด้วย

เกตเวย์เป็นตัวกลางที่ติดตั้งบนเซิร์ฟเวอร์เพื่อให้แน่ใจว่าบริการอื่น ๆ จะห่อหุ้มอินเทอร์เฟซไว้

แนวโน้มการพัฒนา

อาหารที่เกี่ยวข้องใหม่: REST API - เทคโนโลยีอินเทอร์เน็ตในปัจจุบันมีไว้เพื่ออะไร REST เป็นพื้นฐานของสถาปัตยกรรมเว็บสมัยใหม่ ซึ่งได้รับการพัฒนาโดยการวิเคราะห์สไตล์ที่มีอยู่บางส่วนและแนะนำส่วนเพิ่มเติมใหม่ๆ

เป้าหมายของ REST API - คืออะไร จุดมุ่งหมายคือการรวมสไตล์ที่แตกต่างเข้ากับชุดขอบเขตที่ประสานกันเพื่อลดการครอสทอล์คและเพิ่มวิวัฒนาการที่เป็นอิสระของส่วนประกอบเพื่อให้ได้ขนาด ราคาของสถาปัตยกรรมไฮเปอร์มีเดียใหม่ ด้วยการถือกำเนิดของสมาร์ทโฟน แท็บเล็ต และอุปกรณ์ต่างๆ ทำให้มีการวัดขนาด

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

URL และเงื่อนไข

หลักการสำคัญของ REST คือการแบ่ง API ของคุณออกเป็นทรัพยากรเชิงตรรกะ การจัดการทรัพยากรเหล่านี้ดำเนินการโดยใช้คำขอ HTTP เพิ่มเติมด้วยวิธีมาตรฐาน – GET, POST, PUT, PATCH, DELETE

ทรัพยากรจะต้องอธิบายด้วยชื่อของหลายหลาก การดำเนินการกับทรัพยากรถูกกำหนดโดยใช้กลยุทธ์ CRUD และได้รับการสนับสนุนโดยวิธี HTTP ตามลำดับต่อไปนี้:

  • GET /api/users – ดึงข้อมูลรายชื่อไคลเอนต์
  • GET /api/users/123 - เลือกผู้ใช้ที่ระบุ
  • POST /api/users – สร้างผู้ใช้ใหม่
  • PUT /api/users/123 - อัปเดตรายละเอียดทั้งหมดของผู้จัดการบัญชีที่ระบุ
  • PATCH /api/users/123 – อัปเดตข้อมูลของ koristuvach บางส่วน
  • ลบ /api/users/123 - ตรวจสอบความถูกต้อง

เนื่องจากทรัพยากรมีอยู่เฉพาะในบริบทของทรัพยากรอื่น คุณจึงสามารถรวม URL ได้:

  • รับ /api/posts/9/comments - เลื่อนรายการความคิดเห็นลงไปที่รายการหมายเลข 9
  • GET /api/posts/9/comments/3 - ย้ายความคิดเห็นหมายเลข 3 ไปยังโพสต์หมายเลข 9

หากการดำเนินการกับออบเจ็กต์เป็นการดำเนินการ CRUD ก็สามารถใช้เป็นทรัพยากรในการจัดเก็บข้อมูลได้:

  • POST /api/posts/9/like - หมายถึงบันทึกหมายเลข 9 ว่ามีความคล้ายคลึงกัน
  • ลบ /api/posts/9/like - ลบไอคอน "มีคุณสมบัติ" ออกจากโพสต์หมายเลข 9

การสร้างและการต่ออายุทรัพยากรสามารถพลิกทรัพยากรได้

วิธีการ POST, PUT หรือ PATCH สามารถเปลี่ยนฟิลด์ทรัพยากรที่ไม่ได้รวมไว้ก่อนที่จะป้อนได้ (เช่น ID, วันที่สร้าง หรือวันที่อัปเดต) เพื่อไม่ให้ผู้ใช้มี API มากเกินไป คุณต้องส่งคำขออีกครั้งเพื่อลบข้อมูลที่อัปเดต วิธีการดังกล่าวสามารถเปลี่ยนแปลงได้

กรอง จัดเรียง และค้นหา

พารามิเตอร์การสืบค้น HTTP ใด ๆ สามารถใช้ในวิกิเพื่อชี้แจงการสืบค้นหรือเรียงลำดับข้อมูล

  • GET /api/users?state=active – รายชื่อผู้ใช้บัญชีที่ใช้งานอยู่
  • GET /api/tasks?state=open&sort=priority,-created_at - รายการงานที่ยังไม่ได้สร้าง จัดเรียงตามลำดับความสำคัญและวันที่สร้าง (เริ่มต้นด้วยงานใหม่)

การนำทางแบบโปสเตอร์

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

ก้นส่วนหัว:

ลิงค์: - rel = "ถัดไป", - rel="ก่อนหน้า", - rel="ครั้งแรก", - rel="สุดท้าย"

ค่า rel ที่เป็นไปได้:

  • ถัดไป – หน้าผลลัพธ์กำลังจะมา
  • ก่อนหน้า – ด้านหน้าของผลลัพธ์;
  • หน้าแรก – หน้าแรกของผลลัพธ์
  • สุดท้าย – ด้านสุดท้ายของผลลัพธ์

สิ่งสำคัญคือต้องเข้าใจความหมายเหล่านี้ แทนที่จะสร้าง URL ที่แตกต่างกัน เพื่อให้บางครั้งการนำทางหลังหน้าอาจเป็นไปตามกฎที่ซับซ้อน แทนที่จะค้นหาหน้าเว็บแบบง่ายๆ

การกำหนดใหม่ให้กับวิธี HTTP

หากต้องการใช้กับเซิร์ฟเวอร์หรือไคลเอ็นต์บางตัวที่ไม่รองรับวิธี HTTP อื่นที่ไม่ใช่ GET และ POST อาจจำเป็นต้องมีการจำลอง ค่าสำหรับวิธีการจะถูกส่งผ่านไปยังส่วนหัว X-HTTP-Method-Override และค่านั้นจะถูกระบุว่าเป็นวิธี POST คำขอ GET ไม่ผิดที่จะเปลี่ยนค่ายเซิร์ฟเวอร์!

สถานะ Kodi HTTP

  • 200 ตกลง – ตอบสนองต่อคำขอที่ประสบความสำเร็จ GET, PUT, PATCH หรือ DELETE
  • สร้างแล้ว 201 รายการ - การตอบสนอง POST จะระบุผลลัพธ์ของการสร้างวัตถุใหม่ การตอบกลับอาจมาพร้อมกับส่วนหัว Location ซึ่งระบุ URL ของทรัพยากร
  • 204 ไม่มีเนื้อหา - บ่งชี้ถึงความสำเร็จของคำสั่งที่ไม่เปลี่ยนแปลงอะไรเลย (เช่น DELETE)
  • 404 ไม่พบ - ไม่พบวัตถุที่ร้องขอ
  • 500 ข้อผิดพลาดเซิร์ฟเวอร์ภายใน - ข้อผิดพลาดบนเซิร์ฟเวอร์

ในกรณีการซื้อ ประเภทนั้นอาจมีข้อมูลเพิ่มเติมสำหรับผู้ซื้อ หากเป็นไปได้

นักแสดงพูดว่า:

“เช. เอพีไอซึ่งคำขอ HTTP ของ wikirist ใด

รับ วาง โพสต์і ลบ ".

ใครก็ตามที่พูดเหมือนกัน:

“อ้างอิงถึง URI เพิ่มเติมสำหรับการจัดสรรทรัพยากร”

คนอื่น ๆ กรีดร้องออกมาดัง ๆ :

ในตอนท้ายคุณสามารถพูดได้ว่า:

“โดยหลักการแล้วมันง่าย เอพีไอเป็นนักวิโคริสต์จริงๆ HTTPขวา!"

การกระทำของคนเหล่านี้ได้ยืนยันความเมตตาของมิลคอฟ

เดยากิ แชสต์โคโว เวอร์นี

แต่มันไม่มีความหมาย

โบเหม็น ทุกคนพลาดประเด็นไป.

เพื่อให้สามารถพัฒนา RESTful API ได้

ตามข้อแรก

ส่วนที่เหลือคืออะไร?

ส่วนที่เหลือคืออะไร?

ส่วนที่เหลือคือ:

    Virazno ไม่ใช่ HTTP

    จิไม่มีโปรโตคอล

    ไม่มีข้อกำหนด

เหตุใดจึงมี REST API มากมาย

และยัง...

REST เป็นรูปแบบของสถาปัตยกรรม

โอ้โห...สถาปัตยกรรมแบบนี้มันคืออะไรคะ?

สไตล์สถาปัตยกรรม

สถาปัตยกรรมบาซานา

มันเป็นเพียงสถาปัตยกรรมบวกชุดของขอบเขตที่สร้างขึ้นเพื่อสถาปัตยกรรมซึ่งสร้างสถาปัตยกรรมขั้นสูงสุด

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

REST ย่อมาจากการถ่ายโอนข้อมูล

สิ่งนี้ถูกบันทึกโดย Roy Fielding ในวิทยานิพนธ์ระดับปริญญาเอกของเขาในปี 2000 โดยบรรยายถึงสถาปัตยกรรมเว็บในปัจจุบันว่าเป็นนามธรรม

ชื่อของบูลานั้นถูกเรียกในคำแถลงของ Wiklikati เกี่ยวกับวิธีจัดการกับการพัฒนาผลิตภัณฑ์เสริมอาหารบนเว็บที่ดี

Roy อธิบาย REST ด้วยตัวอย่างง่ายๆ:

ลองมาดูที่หน้าเว็บเป็นเครื่องเสมือน

ด้านผิวหนังหมายถึงร่างกาย:

1. ขั้นแรก Koristuvach จะลบค่ายแรกออกจากรูปลักษณ์ของค่ายดัชนี

2. จากนั้น koristuvach เข้าสู่โปรแกรมโดยเลือกข้อความ (ที่นี่ข้อความจะถูกส่งไปยังด้านข้าง)

3.ผลการโอนการรุกไปยังค่ายกอริสตูวาเชวี

REST dosi ไม่ใช่ HTTP

แน่นอนว่าในช่วงต้นปี 2000 เครือข่ายกำลังทำงานบน HTTP อยู่แล้ว และ Roy และเพื่อนวิศวกรของเขาก็กำลังทำงานอยู่บ่อยครั้ง

อย่างไรก็ตาม REST ไม่ได้ระบุรายละเอียดการใช้งานระบบเฉพาะหรือไวยากรณ์ของโปรโตคอล

เป็นไปได้ทั้งหมดที่จะสร้างสถาปัตยกรรม RESTful บนโปรโตคอลที่รับรู้ HTTP

ตัวอย่างเช่น CoAP (Cooperative Access Protocol) เป็นโปรโตคอล RESTful สำหรับการปรับใช้อุปกรณ์ (Internet of Things) และใช้เพื่อจัดสรรทรัพยากรขั้นต่ำทั้งที่อุปกรณ์และในเวลาเดียวกัน

แล้วการใช้ REST มีประโยชน์อะไร?

เวิลด์ไวด์เว็บใช้สถาปัตยกรรม REST

ดังนั้น หากคุณสร้าง non-RESTful API ซึ่งเป็นเรื่องปกติบนอินเทอร์เน็ต แสดงว่าคุณกำลังสร้างระบบที่ไม่เหมาะสม ไม่เหมาะที่สุดสำหรับสถาปัตยกรรมที่ได้รับการปรับให้เหมาะสม

สิ่งสำคัญคือต้องทราบว่า API ที่ไม่ใช่ RESTful บางตัวอาจไม่เหมาะสมที่สุดสำหรับสถาปัตยกรรม Edge แต่ไม่เหมาะสำหรับปัญหาอื่นๆ ตัวอย่างเช่น โปรแกรมส่วนหน้าสมัยใหม่สามารถตอบสนองความต้องการที่เฉพาะเจาะจงได้ และมีไลบรารีการรวบรวมข้อมูลจำนวนมากขึ้น เช่น GraphQL หรือ Falcor

มี RESTful API กี่ตัว?

API จะมี RESTful หากทำงานอย่างต่อเนื่องภายใต้ขอบเขต REST

REST หมายถึง 6 ขอบเขตเพื่อให้บรรลุการปรับระบบให้เหมาะสมตามที่ต้องการ:

1. ไคลเอนต์เซิร์ฟเวอร์

การแลกเปลี่ยนนี้ขึ้นอยู่กับหลักการของผลประโยชน์

ช่วยให้ส่วนประกอบสามารถพัฒนาได้อย่างอิสระ เมื่อเราสร้าง API ของเรา API จะทำหน้าที่เป็นเซิร์ฟเวอร์ที่ให้บริการลูกค้าจำนวนมาก

2. ไม่มีจำนวนมาก

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

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

มาตรการที่มีประสิทธิผลมากที่สุดคือมาตรการที่ไม่มีประสิทธิภาพในการวัด

หากเราสร้าง API ของเรา การเพิกเฉยต่อแคชก็ไม่ใช่ความผิดของเรา

4. อินเทอร์เฟซที่ถูกต้อง

เพื่อให้มั่นใจว่าการแคชแคชมีประสิทธิภาพ ส่วนประกอบจะต้องสามารถสื่อสารผ่านอินเทอร์เฟซเดียว ด้วยอินเทอร์เฟซเดียว ข้อมูลที่ต้องการสามารถส่งในรูปแบบมาตรฐานได้

4.1. การระบุทรัพยากร

ซึ่งหมายความว่าข้อมูลใดๆ ที่สามารถตั้งชื่อได้อาจเป็นทรัพยากร (รูปภาพ เอกสาร หรือชุดของทรัพยากรอื่นๆ)

4.2. การจัดการทรัพยากรผ่านการสำแดง

ทรัพยากรสามารถแสดงได้หลายวิธี

เช่น HTML, XML, JSON หรือส่งไฟล์ JPEG

ซึ่งหมายความว่าลูกค้าโต้ตอบกับทรัพยากรผ่านการสำแดงของพวกเขา ซึ่งจะช่วยลดความเข้าใจเชิงนามธรรมของทรัพยากรในการโต้ตอบของพวกเขาได้อย่างมาก

4.3 ประการที่สาม ข้อมูลที่อธิบายตนเอง

ซึ่งหมายความว่าทรัพยากรสามารถให้คำอธิบายตามคำขอที่รายงานได้ และเซิร์ฟเวอร์สามารถให้คำอธิบายเกี่ยวกับไซต์ได้ ดังนั้นส่วนหัว HTTP และโค้ดตอบกลับจึงเป็นการใช้งานหลักสำหรับกฎนี้

4.4. ไฮเปอร์มีเดียอาจกลายเป็นกลไกและกลายเป็นโปรแกรม

นี่หมายความว่าแท้จริงแล้วโปรแกรมนั้นมาพร้อมกับพาวเวอร์ที่ช่วยให้ไคลเอนต์สามารถเข้าถึงทรัพยากรผ่านการไฮเปอร์พาวเวอร์

อย่างที่คุณเห็น กฎเหล่านี้จำนวนมากสามารถนำไปใช้ในโปรโตคอล HTTP ได้ ดังนั้น หาก Vikorist API ใช้ HTTP อย่างถูกต้อง นี่เป็นโอกาสอันดีที่จะกลายเป็น RESTful

5. ระบบถุง

ในระบบเครือข่ายที่หลากหลาย ตัวกลาง เช่น พร็อกซีเซิร์ฟเวอร์ สามารถตั้งอยู่ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ได้ โดยใช้อินเทอร์เฟซเครือข่ายโหมดเดียว

ข้อดีประการหนึ่งของระบบสมบูรณ์คือตัวกลางสามารถสกัดกั้นการรับส่งข้อมูลไคลเอนต์-เซิร์ฟเวอร์เพื่อวัตถุประสงค์ในการเพลง/เช่น สำหรับการแคช

6. รหัสวิโมก้า

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

ดังนั้นจะสร้าง REST API ได้อย่างไร?

vikoristuvat HTTP อย่างถูกต้อง

หากคุณจะใช้ RESTful API ให้ปรับแต่งโปรโตคอล RESTful สำหรับอินเทอร์เน็ต โปรโตคอล HTTP เป็นตัวเลือกแรก สร้าง API สำหรับการใช้งาน HTTP ที่เหมาะสม

สร้างอินเทอร์เฟซเดียว

จัดแนวคิดของคุณให้สอดคล้องกับทรัพยากรและกำหนดตัวระบุที่ไม่ซ้ำกันให้กับแต่ละทรัพยากร วิธีที่ง่ายที่สุดคือการใช้บริการฐานข้อมูลสำหรับชาวต่างชาติ สำหรับบริการดังกล่าวเราสามารถตั้งชื่อทรัพยากรได้สองรายการ Koristuvachiv และ koristuvachiv (ทรัพยากรการรวบรวม) ทรัพยากรเหล่านี้สามารถระบุได้ด้วย /users URI และ /user/(id) URI ของ API ของคุณ

จัดแสดง API ไฮเปอร์พาวเวอร์ของคุณ

จำสถาปัตยกรรม REST

แง่มุมที่ท้าทายน้อยกว่าในการสร้าง RESTful API ขึ้นอยู่กับความสำคัญของการทำความเข้าใจอินเทอร์เน็ตและสถาปัตยกรรมพื้นฐานของอินเทอร์เน็ต เราอาจเร่งการเพิ่มประสิทธิภาพนี้ให้เร็วขึ้นหรือเพิกเฉยก็ได้

หากคุณมีปัญหาเรื่องอาหาร เราขอจากเรา

ขอบคุณที่อ่านโพสต์ของฉัน
ฟันเฟืองและความคิดมักจะลอยอยู่ในส่วนความคิดเห็น

สวัสดีผู้อ่านที่รัก! ก่อนที่คุณจะเริ่มอ่านบทความนี้ ฉันต้องการอธิบายเป้าหมายของการสร้างนี้และการเปิดเผยที่กระตุ้นเตือนให้ฉันเขียนบทความนี้

ในโปรเจ็กต์หนึ่งของบริษัท Vinyl ของเรา จำเป็นต้องออกแบบแอปพลิเคชันเซิร์ฟเวอร์ในรูปแบบ REST จากจุดเริ่มต้น เราสงสัยว่าจะทำอย่างไรกับงานง่ายๆ และเพื่อจุดประสงค์นี้ในการดึงข้อมูลที่ทรงพลังที่สุด

เมื่อเราเริ่มกระบวนการพัฒนาสถาปัตยกรรมและนำบริการ REST ไปสู่รูปแบบที่เป็นหนึ่งเดียว เพื่อนร่วมงานของเราและฉันก็เริ่มมีปัญหาที่ขัดแย้งกันและมุมมองที่แตกต่างกันเกี่ยวกับการดำเนินการด้านนี้หรือด้านนั้น ที่นี่เราตระหนักดีว่าจำเป็นต้องเปิด Google และไปช่วยเหลือจิตส่วนรวม เรียนรู้แนวทางปฏิบัติที่ดีที่สุดที่ต้องหลีกเลี่ยงเมื่อออกแบบโปรแกรม RESTful

บทความนี้จะน่าสนใจสำหรับผู้ที่อาจมีความเข้าใจที่ชัดเจนในการทำงานกับส่วนเสริมของเว็บ (และอาจรวมถึงบริการ REST) ​​แต่จะไม่ต้องการการรวบรวมและมาตรฐานความรู้ของพวกเขา

วาซนาเชนเนีย

ก่อนอื่นคุณต้องรู้ว่า REST คืออะไร Wikipedia ให้คำตอบทางโภชนาการนี้ พักผ่อน (การโอนตัวแทนของรัฐ- “การถ่ายโอนไปยังการสำแดง”) เป็นรูปแบบสถาปัตยกรรมของการโต้ตอบระหว่างส่วนประกอบของส่วนที่แยกออกภายในขอบเขต REST จัดเตรียมชุดการเชื่อมต่อที่สะดวกสำหรับการพิจารณาเมื่อออกแบบระบบไฮเปอร์มีเดียแบบกระจาย

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

โปรดเข้าใจด้วยว่านี่คือบริการ REST ฉันกำหนดบริการ REST ว่าเป็น “จุดโต้ตอบระหว่างโปรแกรมไคลเอนต์และเซิร์ฟเวอร์” ในคำศัพท์เฉพาะของ Java นี่คือเซิร์ฟเล็ต ซึ่งไคลเอ็นต์ส่งคำขอ

ปัญหา

ก่อนที่เราจะเริ่มต้นอธิบายกฎ ฉันอยากจะสื่อถึงแนวคิดที่ว่า REST ไม่ใช่มาตรฐาน เนื่องจากไม่มีกฎที่เหมือนกันที่ต้องปฏิบัติตาม ซึ่งหมายความว่ายังไม่มีความเข้าใจเกี่ยวกับวิธีการแก้ไขปัญหาเหล่านั้นที่สามารถแก้ไขสถานการณ์ใดสถานการณ์หนึ่งได้ดีที่สุด เป็นเรื่องปกติมากที่จะอ่านเกี่ยวกับวิธีการใช้ HTTP และรหัส HTTP ที่จะใช้ในแต่ละสถานการณ์

ชื่อบริการ

ในการเริ่มต้น คุณต้องเลือกชื่อสำหรับบริการ REST ภายใต้ชื่อบริการ ฉันเคารพเส้นทางของคุณใน URI ของคำขอ ตัวอย่างเช่น, http://my-site.by/api/rest/service/name- ในการเลือกชื่อ เราต้องเข้าใจว่า "ทรัพยากร" คืออะไรในสถาปัตยกรรม REST

ส่วยทรัพยากร

ในคำศัพท์ REST อาจเป็นทรัพยากร - เอกสาร HTML รูปภาพ ข้อมูลเกี่ยวกับไคลเอนต์เฉพาะ ฯลฯ เนื่องจากทรัพยากรเป็นวัตถุจริง จึงง่ายต่อการดูในรูปแบบมาตรฐาน เช่น XML หรือ JSON จากนั้นเซิร์ฟเวอร์สามารถส่งทรัพยากรนี้โดยใช้รูปแบบที่เลือก และไคลเอนต์สามารถทำงานกับทรัพยากรที่เลือกจากเซิร์ฟเวอร์ได้

ตัวอย่างที่ส่งไปยังทรัพยากร "โปรไฟล์" ในรูปแบบ JSON:

    "รหัส" :1 ,

    "ชื่อ" :"มาเฮช" ,

    "เข้าสู่ระบบ" :"มเนศ"

REST ไม่ได้กำหนดข้อจำกัดที่ชัดเจนเกี่ยวกับรูปแบบที่จะใช้เพื่อแสดงทรัพยากร และมีกฎบางประการที่ต้องปฏิบัติตามเมื่อพัฒนารูปแบบที่จะใช้เพื่อแสดงทรัพยากร:

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

ตัวอย่างการส่งทรัพยากร "คำขอ" และการเชื่อมต่อกับทรัพยากร "โปรไฟล์":

    รหัส: 11254,

    สกุลเงิน: "EUR" ,

    จำนวน: 100

    ประวัติโดยย่อ: (

    รหัส: 11,

    ยูริ: "http://MyService/Profiles/11"

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

Zvernennya ไปยังทรัพยากร

ทรัพยากรสกินอาจถูกระบุโดยไม่ซ้ำกันด้วยตัวระบุถาวร "ถาวร" หมายความว่าตัวระบุจะไม่เปลี่ยนแปลงในช่วงเวลาของการแลกเปลี่ยนข้อมูล และเมื่อมีการเปลี่ยนแปลง ตัวระบุจะถูกกำหนดให้กับทรัพยากร หากทรัพยากรได้รับการกำหนดตัวระบุอื่น เซิร์ฟเวอร์จะต้องแจ้งให้ลูกค้าทราบ ซึ่งจะระบุวันที่ส่งไปยังที่อยู่ใหม่ ทรัพยากรจะถูกระบุโดยไม่ซ้ำกันด้วย URL ซึ่งหมายความว่า URL เป็นคีย์หลักสำหรับรายการข้อมูล ตัวอย่างเช่นโตโต้มีหนังสือเล่มอื่นจากหนังสือตำรวจมาติมามอง /หนังสือ/2 และด้านที่ 41 ของหนังสือเล่มนี้คือ /หนังสือ/2/หน้า/41 - Zvіdsi y รูปแบบงานทางออก ยิ่งกว่านั้นไม่สำคัญว่ารูปแบบใดจะมีข้อมูลที่อยู่เบื้องหลังที่อยู่ /หนังสือ/2/หน้า/41 – ซึ่งอาจเป็น HTML, สำเนาที่สแกนของไฟล์ jpeg หรือเอกสาร Word

ขอแนะนำให้เลือกชื่อทรัพยากรหลายชื่อเมื่อกำหนดชื่อให้กับบริการ REST วิธีการนี้ช่วยให้คุณสามารถเพิ่มบริการ REST ใหม่โดยไม่ต้องขยายชื่อของบริการที่มีอยู่ ตัวอย่างเช่นการบริการ /หนังสือ แจ้งรายชื่อหนังสือทั้งหมดของคุณให้เราทราบ /หนังสือ/3 พลิกดูข้อมูลเกี่ยวกับหนังสือเล่มที่ 3 และบริการ /books/3/pages พลิกทุกด้านของหนังสือเล่มที่สาม

สำหรับบริการที่สร้างการดำเนินการเฉพาะบนทรัพยากร มีสองวิธีในการป้อนการดำเนินการ: ในชื่อบริการหรือในพารามิเตอร์ ตัวอย่างเช่น, /books/3/clean หรือ /books/3?clean - ฉันให้ความสำคัญกับตัวเลือกแรกมากกว่าเพราะบริการดังกล่าวมักจะใช้วิธีการ POST ที่ไม่รองรับการส่งพารามิเตอร์ไปยัง URL ซึ่งทำให้บริการตามความคิดของฉันไม่สามารถอ่านได้มากนัก เนื่องจากความสำคัญของประเภทของการดำเนินการในนามของบริการ เราจะขยายบริการของเราให้มากขึ้น โดยอยู่ในประเภทของวิธี HTTP ให้มากที่สุดเท่าที่จะเป็นไปได้

นอกจากนี้ ไม่แนะนำให้ใช้ชื่อที่มีแท็กทางด้านซ้ายและอธิบายธุรกิจของบริการคลังสินค้า (เนื่องจากแนะนำให้ใช้เมื่อตั้งชื่อวิธี Java) ตัวอย่างเช่นzamіst /getAllCars วิธีที่ดีกว่าในการหารายได้ /รถ - เนื่องจากวิธีการนี้ไม่สามารถอธิบายได้ด้วยคำเดียว จึงจำเป็นต้องสร้างตัวคั่นรูปแบบเดียว ฉันจึงเรียก vikory '-' ซึ่งเป็นแนวทางที่ได้รับความนิยมมากที่สุด ตัวอย่างเช่น, /cars/3/ขายได้.

สามารถอ่านรายละเอียดเพิ่มเติมเกี่ยวกับการออกแบบชื่อเซอร์วิส REST ได้

วิธีการ HTTP

REST มี 4 วิธี HTTP หลัก: GET, POST, PUT, DELETE ส่วนใหญ่แล้วสกินของวิธีการจะให้บริการจนกระทั่งสิ้นสุดธุรกิจกับ CRUD ( ทำซ้ำ, อี๊ด, ยูวันที่, elete – “การสร้าง การอ่าน การอัปเดต การดู”).
โพสต์ – สร้าง, รับ – อ่าน, ใส่ – อัปเดต, ลบ – ลบ

นอกจากนี้ที่สำคัญ: สิ่งเหล่านี้เรียกว่า REST-Patterns ซึ่งเกี่ยวข้องกับวิธี HTTP ที่ต้องนำไปใช้ ยิ่งใกล้บ้านมากขึ้น รุ่นต่างๆ จะมอง POST และ PUT ในรูปแบบที่ต่างกัน อย่างไรก็ตาม การกำหนด PUT สำหรับการสร้าง การแทนที่ หรือการอัปเดตไม่ได้ถูกกำหนดให้กับ POST ดังนั้นจึงสามารถเปลี่ยนรหัส POST และ PUT ได้ ในกรณีส่วนใหญ่ POST ใช้สำหรับการสร้าง และ PUT ใช้สำหรับการแก้ไข และฉันจะอธิบายเหตุผลในภายหลัง

ฉันจะยกตัวอย่างวิธีการโต้ตอบกับทรัพยากรต่างๆ จำนวนหนึ่ง

  • รับ /หนังสือ/- เลือกรายการหนังสือทั้งหมด เรียกร้องการให้อภัยก็แค่นั้นแหละ วางเฉพาะช่องตัวระบุและชื่อออบเจ็กต์ โดยไม่มีข้อมูลอื่น
  • GET /หนังสือ/(id)- ลบข้อมูลเพิ่มเติมเกี่ยวกับหนังสือ
  • โพสต์ /หนังสือ/- ฉันกำลังสร้างหนังสือเล่มใหม่ ข้อมูลจะถูกส่งในบันทึก
    PUT /หนังสือ/(id)– เปลี่ยนแปลงข้อมูลเกี่ยวกับหนังสือด้วยตัวระบุ (id) ซึ่งอาจแทนที่ได้ ข้อมูลจะถูกถ่ายโอนตามคำขอด้วย
  • ตัวเลือก /หนังสือ- เลือกรายการการดำเนินการที่รองรับสำหรับทรัพยากรที่ได้รับมอบหมาย (ในทางปฏิบัติไม่ชนะ)
  • ลบ /หนังสือ/(id)– ลบข้อมูลจากตัวระบุ (id)

ความปลอดภัยและการไร้อำนาจ

การทราบถึงความปลอดภัยและความสม่ำเสมอของวิธีการเหล่านี้สามารถช่วยในการเลือกวิธี HTTP ได้เช่นกัน

คำขอที่ไม่ระมัดระวังไม่ใช่คำขอที่ไม่เปลี่ยนสถานะของโปรแกรม

คำขอ idempotent ไม่ใช่คำขอ ซึ่งเอฟเฟกต์ที่เป็นวิสคอนแนนต์ขนาดใหญ่จะเก่ากว่าเอฟเฟกต์ของการรับสารภาพครั้งเดียว

เมื่อพิจารณาจากตารางนี้ คำขอ GET จะไม่เปลี่ยนสถานะของทรัพยากรที่กำลังหยุดนิ่ง คำสั่ง PUT และ DELETE สามารถเปลี่ยนสถานะของทรัพยากรได้ แต่สามารถทำซ้ำได้อย่างใจเย็น เนื่องจากไม่มีเหตุผลที่คำสั่งก่อนหน้านี้จะสิ้นสุดลง โดยหลักการแล้ว มันเป็นตรรกะ: หากคุณทำซ้ำทรัพยากรใดทรัพยากรหนึ่งซ้ำแล้วซ้ำอีกและแทนที่ด้วยทรัพยากรที่กำหนด ผลลัพธ์ที่ได้คือการทดแทนทรัพยากรเพิ่มเติม Ale POST ถูกเขียนขึ้นดังที่เห็นในตาราง ไม่ปลอดภัยและไร้อำนาจ ไม่เพียงแต่จะเปลี่ยนแปลงทรัพยากรเท่านั้น แต่ยังรวมถึงผลกระทบที่มักเกิดขึ้นซ้ำๆ อีกด้วยนั้นมีความผันแปรสูง สิ่งนี้จะแสดงแทนโดยการดำเนินการเพิ่มองค์ประกอบ DB ใหม่: หน้าต่างถูกเขียน X ครั้ง และ DB ได้รับองค์ประกอบ X

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

รหัส HTTP

มาตรฐาน HTTP อธิบายรหัสสถานะมากกว่า 70 รหัส ฟอร์มดีขอตัวหลักครับ

  • 200 – ตกลง – คำขอสำเร็จ หากลูกค้าร้องขอข้อมูลใดๆ ข้อมูลนั้นจะปรากฏในส่วนหัวและ/หรือข้อมูล
  • 201 – ตกลง – จากความสำเร็จของภารกิจ ทรัพยากรใหม่ได้ถูกสร้างขึ้น
  • 204 – ตกลง – รับทรัพยากรสำเร็จแล้ว
  • 304 – ไม่ดัดแปลง – ไคลเอนต์สามารถเข้าถึงข้อมูลจากแคช
  • 400 – คำขอไม่ถูกต้อง – คำขอไม่ถูกต้องหรือไม่สามารถดำเนินการตามคำขอได้
  • 401 – ไม่ได้รับอนุญาต – คำขอระบุการรับรองความถูกต้องของลูกค้า
  • 403 – ถูกห้าม – เซิร์ฟเวอร์ได้ร้องขอการอนุญาต แต่ไม่ได้รับอนุญาตให้ดำเนินการ และการเข้าถึงถูกบล็อก
  • 404 – ไม่พบ – ไม่พบทรัพยากร
  • 500 – ข้อผิดพลาดเซิร์ฟเวอร์ภายใน – นักพัฒนา API มีความผิดในการหลีกเลี่ยงข้อบกพร่องดังกล่าว

ผลประโยชน์เหล่านี้อาจติดอยู่ใน catch block ทั่วโลก ให้คำมั่นไว้ หรือมิฉะนั้นก็หันกลับจากสาขา

ยิ่งชุดโค้ดที่เราปรับแต่งมีขนาดใหญ่ขึ้น API ที่เราสร้างขึ้นก็จะยิ่งฉลาดมากขึ้นเท่านั้น อย่างไรก็ตาม โปรดทราบว่าเบราว์เซอร์จะประมวลผลโค้ดเหล่านี้แตกต่างออกไป ตัวอย่างเช่น เบราว์เซอร์บางตัวที่ปฏิเสธรหัสตอบกลับ 307 จะแสดงการเปลี่ยนเส้นทางทันที และเบราว์เซอร์บางตัวก็อนุญาตให้คุณจัดการกับสถานการณ์นี้และบันทึกการดำเนินการได้ ก่อนอื่น สิ่งสำคัญคือต้องเข้าใจว่ามันทำงานอย่างไรในฝั่งไคลเอ็นต์!

ส่วนหัว

  • ชนิดของเนื้อหา- รูปแบบที่ถาม;
  • ยอมรับ- รายการรูปแบบการออกอากาศ

พารามิเตอร์สำหรับการค้นหาทรัพยากร

เพื่อให้การเลือกบริการที่รับผิดชอบในการประมวลผลข้อมูลใด ๆ ง่ายขึ้น และยังทำให้มีประสิทธิผลมากขึ้นด้วย จำเป็นต้องเข้าใจวิธีป้อนพารามิเตอร์สำหรับการเรียงลำดับ การกรอง การเลือกฟิลด์ และการแบ่งหน้า

การกรอง

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

ตัวอย่างเช่น หากต้องการแสดงสมุดสีแดงทั้งหมด คุณต้องเขียน:

GET /books?color=red

ซอร์ตุวานยา

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

GET /books?sort=-ปี,+ชื่อ

การแบ่งหน้า

เพื่อรองรับความเป็นไปได้ในการเข้าถึงรายการทรัพยากรที่อาจปรากฏบนหน้าเดียวกันของโปรแกรม REST API จะใช้ฟังก์ชันการแบ่งหน้า มันถูกนำไปใช้โดยใช้พารามิเตอร์ SQL ที่เรารู้จัก: ขีดจำกัดและออฟเซ็ต ตัวอย่างเช่น:

GET /books?offset=10&limit=5

นอกจากนี้ เป็นรูปแบบที่ดีในการแสดงข้อความทั้งด้านหน้า ด้านหลัง หน้าแรก และหน้าแรกที่เหลือในส่วนหัวของลิงก์ ตัวอย่างเช่น:

ลิงค์: - rel = "ถัดไป",
- rel="สุดท้าย",
- rel="ครั้งแรก",
- rel="ก่อนหน้า"

เลือกฟิลด์สำหรับทรัพยากร

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

GET /books?fields=id,color

ฉันจะช่วยคุณ

เหตุผลประการหนึ่งสำหรับการแลกเปลี่ยนบริการ RESTful คือพวกเขาต้องประหยัดเวลาของลูกค้าเพื่อที่จะลบคำขอออก

ตัวอย่างบริการที่ไม่ประหยัดเงิน:
คำขอ1:
คำขอ2: รับ http://MyService/Persons/2 HTTP/1.1

ผิวจากเครื่องดื่มเหล่านี้อาจทำให้เกิดปัญหาผิวได้โดยไม่คำนึงถึงสิ่งอื่น

ตัวอย่างบริการที่ช่วยประหยัดเงิน:
คำขอ1: รับ http://MyService/Persons/1 HTTP/1.1
คำขอ2: รับ http://MyService/NextPerson HTTP/1.1

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

ข้อดีของการบริการที่ไม่ประหยัดต้นทุน:

  • บริการขอเครื่องดื่มแยกจากกัน
  • สถาปัตยกรรมของการบริการจะกล่าวคำอำลา
  • ไม่จำเป็นต้องใช้ความพยายามเพิ่มเติมในการใช้บริการโดยใช้โปรโตคอล HTTP ซึ่งไม่ได้บันทึกข้อมูลด้วย

บริการไม่เพียงพอที่ไม่ประหยัดเงิน:

  • ลูกค้าเองมีหน้าที่รับผิดชอบในการถ่ายโอนบริการที่จำเป็นตามบริบทไปยังบริการ

เวอร์ชัน

แนวปฏิบัติที่ดีในการสนับสนุนเวอร์ชัน REST API ซึ่งจะทำให้คุณสามารถขยาย API ได้อย่างง่ายดายโดยไม่ต้องผูกมัดไคลเอ็นต์ที่ใช้ API อยู่แล้วเพื่อทำการเปลี่ยนแปลง
แนวทางหลายประการในการนำเวอร์ชันไปใช้:

  • หากต้องการความช่วยเหลือเพิ่มเติม โปรดยอมรับส่วนหัว ในกรณีนี้ เวอร์ชัน API ระบุไว้ใน Accept - ยอมรับ:ข้อความ/v2+json
  • Z wikiristannyam URI ในแนวทางนี้ เวอร์ชัน API จะถูกระบุโดยตรงใน URI - http://localhost/api/v2/books
  • วิกิส่วนหัวที่กำหนดเอง คุณสามารถใช้ส่วนหัวของพาวเวอร์ซึ่งมีหน้าที่ในการส่งเวอร์ชัน API ด้วยเช่นกัน - API เวอร์ชัน:v2
  • ระบบจะถามพารามิเตอร์ Vikoristannya คุณสามารถใช้พารามิเตอร์การถ่ายโอนเวอร์ชัน API - /หนังสือ?v=2

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

เอกสารประกอบ

หากต้องการกำหนดค่าบริการ REST ด้วยตนเอง คุณต้องสร้างเอกสารที่ดีและครอบคลุม สำหรับสิ่งนี้ คุณสามารถใช้เครื่องมือต่างๆ ได้ เช่น Mashape หรือ Apiary แต่ฉันแนะนำให้ใช้ Swagger

Swagger เป็นเทคโนโลยีที่ช่วยให้คุณสามารถบันทึกบริการ REST ได้ Swagger สนับสนุนการเขียนโปรแกรมและเฟรมเวิร์กแบบไร้หน้า Plus Swagger มี UI สำหรับการตรวจสอบเอกสาร

คุณสามารถดูข้อมูลรายงานเกี่ยวกับ Swagger ในราคาได้

คลังเก็บเอกสารสำคัญ

เกชูวานยา

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

Keshuvannyam สามารถใช้ส่วนหัว HTTP ต่อไปนี้:

  • วันที่ - วันที่และเวลาที่สร้างทรัพยากร
  • แก้ไขล่าสุด – วันที่และชั่วโมงของการเปลี่ยนแปลงทรัพยากรบนเซิร์ฟเวอร์ครั้งล่าสุด
  • Cache-Control เป็นส่วนหัว HTTP 1.1 ที่ใช้ในการควบคุมแคช
  • อายุ - ชั่วโมงหลังจากช่วงเวลาของการจับทรัพยากรที่เหลือ ส่วนหัวสามารถเพิ่มได้โดยส่วนประกอบระดับกลาง (ระหว่างไคลเอนต์และเซิร์ฟเวอร์) (เช่น พร็อกซีเซิร์ฟเวอร์)

© 2024 androidas.ru - ทุกอย่างเกี่ยวกับ Android