วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

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

1
SOA / Microservices: จะจัดการการอนุญาตในการสื่อสารระหว่างบริการได้อย่างไร
เบื้องหน้า เรากำลังเปลี่ยนจากแพลตฟอร์มเสาหินเป็นสถาปัตยกรรมที่เน้นการบริการมากขึ้น เราใช้หลักการ DDD ขั้นพื้นฐานมากและแยกโดเมนของเรากับบริบทที่แตกต่างกัน แต่ละโดเมนมีการกระจายและเปิดเผยบริการผ่านเว็บ API (REST) เนื่องจากลักษณะของธุรกิจของเราเรามีบริการเช่นการจอง , บริการ , ลูกค้า , ผลิตภัณฑ์ฯลฯ เรายังได้ติดตั้งเซิร์ฟเวอร์ข้อมูลประจำตัว (ขึ้นอยู่กับเซิร์ฟเวอร์ข้อมูลประจำตัวของ Thinktecture 3) ซึ่งมีบทบาทหลักคือ: การพิสูจน์ตัวตนจากศูนย์กลาง (ให้ข้อมูลรับรองว่ามันเป็นปัญหาโทเค็น) เพิ่มการอ้างสิทธิ์ในโทเค็นเช่น: ขอบเขตของลูกค้า (ตามลูกค้าฉันหมายถึงแอปพลิเคชันที่ทำการร้องขอ), ตัวระบุลูกค้า (ตามลูกค้าฉันหมายถึงบุคคลที่ใช้แอปพลิเคชัน) นอกจากนี้เรายังแนะนำบทบาทของAPI เกตเวย์ซึ่งเป็นศูนย์กลางการเข้าถึงจากภายนอกสู่บริการของเรา API Gateway มีฟังก์ชันที่ไม่ต้องการความรู้อย่างลึกซึ้งเกี่ยวกับโดเมนภายในเช่น: Reverse proxy: กำหนดเส้นทางคำขอที่เข้ามาในบริการภายในที่เหมาะสม การกำหนดเวอร์ชัน: เวอร์ชันของ API เกตเวย์จับคู่กับเวอร์ชันต่างๆของบริการภายใน การตรวจสอบความถูกต้อง: คำขอของลูกค้ารวมถึงโทเค็นที่ออกโดยเซิร์ฟเวอร์ประจำตัวและ API เกตเวย์ตรวจสอบโทเค็น (ตรวจสอบให้แน่ใจว่าผู้ใช้คือใครบอกว่าเธอเป็น) การควบคุมปริมาณ: จำกัด จำนวนการร้องขอต่อลูกค้า การอนุญาต สิ่งที่เกี่ยวข้องกับการอนุญาตนี้ไม่ได้รับการจัดการใน API …

6
ฉันควรใช้ขั้นตอนการจัดเก็บเมื่อใด
ถ้าฉันมีตรรกะทางธุรกิจทั้งหมดของฉันในรหัสและใช้ประโยชน์จาก Entity Framework ในสถานการณ์ใด (ถ้ามี) ฉันจะย้ายตรรกะทางธุรกิจบางอย่างไปยังขั้นตอนการจัดเก็บดีกว่าแทนที่จะเก็บไว้ในรหัสทั้งหมดหรือไม่ เพื่อความชัดเจนฉันหมายถึงร่วมกับการตั้งค่าปัจจุบัน (ตรรกะทางธุรกิจในรหัส) ไม่ใช่แทนที่จะเป็น ฉันได้เห็นคำถามคล้าย ๆ กันหลายข้อที่ถามถึงข้อดีและข้อเสียของการมีตรรกะทางธุรกิจทั้งหมดในขั้นตอนการจัดเก็บ แต่ฉันไม่พบอะไรมากเกี่ยวกับการใช้ขั้นตอนการจัดเก็บเท่าที่จำเป็นสำหรับตรรกะกรณีขอบ ในรหัส ถ้ามันสร้างความแตกต่างฉันกำลังใช้ MSSQL และ Entity Framework นี่คือสถานการณ์ที่ฉันใช้โพรซีเดอร์ที่เก็บไว้ก่อนหน้านี้: รายงานที่ซับซ้อนซึ่งใช้เวลาไม่กี่นาทีในการเรียกใช้ (นี่คือหน้าเว็บในแอปพลิเคชัน) ฉันพบว่าฉันสามารถเขียน SQL ที่มีประสิทธิภาพมากขึ้น (ใช้เวลาเพียงไม่กี่วินาทีในการเรียกใช้) กว่าที่ LINQ จัดหาให้ เว็บแอปพลิเคชันจำเป็นต้องอ่านและเขียนลงในตารางไม่กี่ตารางในฐานข้อมูลแยกต่างหากซึ่งมีข้อมูลที่ละเอียดอ่อนจำนวนมากซึ่งไม่เกี่ยวข้องกับแอปพลิเคชัน แทนที่จะให้สิทธิ์เข้าถึงทุกสิ่งฉันใช้กระบวนงานที่เก็บไว้ซึ่งทำสิ่งที่ต้องการเท่านั้นและส่งคืนข้อมูลที่ จำกัด เท่านั้น เว็บแอปพลิเคชันสามารถเข้าถึงขั้นตอนการจัดเก็บนี้เท่านั้นโดยไม่ต้องเข้าถึงตารางใด ๆ เป็นต้น โพสต์อื่นที่ฉันได้ดูก่อนถามคำถามนี้: ขั้นตอนการจัดเก็บวิธีปฏิบัติที่ไม่ดีที่หนึ่งใน บริษัท ที่ปรึกษาด้านไอทีรายใหญ่ที่สุดในโลก? ข้อดีข้อเสียของการถือตรรกะทางธุรกิจทั้งหมดในขั้นตอนการจัดเก็บในเว็บแอปพลิเคชัน /programming/15142/what-are-the-pros-and-cons-to-keeping-sql-in-stored-procs-versus-code /dba/2450/what-are-the-arguments-against-or-for-putting-application-logic-in-the-database/2452#2452 เมื่อใดที่จะไม่ใช้ ORM และชอบวิธีการจัดเก็บ?

1
ทำไมลำไส้ใหญ่สองเท่าแทนที่จะเป็นจุด
มีข่าวลือว่าการใช้งาน C ++ ในช่วงต้นมีตัวดำเนินการ dot สำหรับการเข้าถึงเนมสเปซ มีความเห็นว่าจุดที่สะดวกกว่าที่ผู้ประกอบการลำไส้ใหญ่สองครั้งที่ทันสมัย อะไรคือเหตุผลที่อยู่เบื้องหลังการแนะนำลำไส้ใหญ่คู่

3
รูปแบบสำหรับการส่งบริบทผ่านห่วงโซ่วิธีการ
นี่คือการตัดสินใจออกแบบที่ดูเหมือนจะเกิดขึ้นมากมาย: วิธีการผ่านบริบทผ่านวิธีการที่ไม่ต้องการให้เป็นวิธีการที่ทำ มีคำตอบที่ถูกต้องหรือไม่นั้นขึ้นอยู่กับบริบท โค้ดตัวอย่างที่ต้องการโซลูชัน // needs the dependency function baz(session) { session('baz'); } // doesn't care about the dependency function bar() { baz(); } // needs the dependency function foo(session) { session('foo') bar(); } // creates the dependency function start() { let session = new Session(); foo(session); } การแก้ปัญหาที่เป็นไปได้ ThreadLocal …

1
เหตุใดเบอร์ทรานด์เมเยอร์จึงคิดว่าการแบ่งคลาสย่อยเป็นวิธีเดียวที่จะขยายโมดูล“ ปิด”?
ในการสร้างซอฟต์แวร์เชิงวัตถุของเมเยอร์(1988) เขาได้กำหนดหลักการเปิด / ปิดดังต่อไปนี้: โมดูลจะได้รับการกล่าวถึงว่าเป็นเปิดถ้ามันยังคงมีอยู่สำหรับส่วนขยาย ตัวอย่างเช่นควรเป็นไปได้ที่จะเพิ่มเขตข้อมูลลงในโครงสร้างข้อมูลที่มีอยู่หรือองค์ประกอบใหม่ในชุดของฟังก์ชันที่ดำเนินการ โมดูลจะถูกปิดหากมีการใช้งานโดยโมดูลอื่น นี่ถือว่าโมดูลนั้นได้รับการกำหนดรายละเอียดที่ดีและมีเสถียรภาพ (อินเทอร์เฟซในแง่ของการซ่อนข้อมูล) เขาพูดต่อไปว่า: หากคุณเปิดโมดูลอีกครั้งคุณจะต้องเปิดไคลเอนต์ทั้งหมดอีกครั้งเพื่ออัปเดตโมดูลเนื่องจากใช้รุ่นเก่า … [ปัญหานี้] เกิดขึ้นทุกครั้งที่โมดูลจะต้องถูกขยายโดยฟังก์ชั่นใหม่หรือองค์ประกอบข้อมูลทำให้เกิดการเปลี่ยนแปลงในไคลเอนต์ทั้งทางตรงและทางอ้อม ... ด้วยวิธีการคลาสสิกในการออกแบบและการเขียนโปรแกรมจึงไม่มีวิธีเขียนโมดูลที่เปิดและปิด วิธีการแก้ปัญหาของเมเยอร์ในภาวะที่กลืนไม่เข้าคายไม่ออกนี้คือ: ไม่ขยายโมดูลห้องสมุดโดยการปรับเปลี่ยนคลาสที่มีอยู่; ให้เขียนโมดูลใหม่แทนคลาสย่อยที่มีอยู่แล้วและให้ไคลเอนต์ใหม่พึ่งพาโมดูลใหม่นั้น ตอนนี้ในปี 1988 ฉันเขียนโปรแกรมของเล่น (ขั้นตอน) ใน Turbo Pascal และ Blankenship Basic และประสบการณ์ระดับมืออาชีพในศตวรรษที่ 21 ของฉันคือ JVM, CLR และในภาษาไดนามิกดังนั้นฉันจึงไม่รู้ว่า Meyer แปลว่าอะไร โดย "แนวทางคลาสสิคเพื่อการออกแบบและการเขียนโปรแกรม" ตัวอย่างหนึ่งที่เป็นรูปธรรมของเมเยอร์ที่ว่าทำไมโมดูลลูกค้าจึงต้องเปิดใหม่ (คำสั่งเปลี่ยนจากการแจงนับซึ่งขณะนี้มีสมาชิกมากขึ้นต้องใช้เคสมากขึ้น) ดูสมเหตุสมผลพอสมควร แต่เขาไม่เกือบยืนยันว่าทุกครั้งที่คุณเพิ่มฟังก์ชันการทำงาน โมดูลคุณต้องอัปเดตไคลเอ็นต์ทั้งหมด มีเหตุผลทางประวัติศาสตร์ที่การยืนยันนี้ดูเหมือนชัดเจนในปี 1988? พูดหรือไม่ว่าการเพิ่มฟังก์ชั่นหรือโครงสร้างข้อมูลไปยัง C static library …

4
Chrome V8 ทำงานอย่างไร และทำไม JavaScript ไม่ได้รวบรวม JIT ตั้งแต่แรก?
ฉันได้ทำการค้นคว้าล่าม / คอมไพเลอร์แล้วฉันก็สะดุดกับ JIT-Compilation โดยเฉพาะ V8 Javascript Engine ของ Google Chrome คำถามของฉันคือ - จะเร็วกว่าการตีความมาตรฐานอย่างไร ทำไมการรวบรวม JIT จึงไม่ถูกใช้ตั้งแต่แรก? ความเข้าใจปัจจุบันของฉัน โปรแกรม Javascript ทุกตัวจะเริ่มต้นเป็นซอร์สโค้ดไม่ว่าวิธีการดำเนินการจะถูกแปลเป็นรหัสเครื่องในที่สุด ทั้งการรวบรวม JITและการตีความต้องเป็นไปตามเส้นทางนี้ดังนั้นการรวบรวม JIT จะเร็วขึ้นอย่างไร มันดูเหมือนว่า JIT รวบรวมเป็นนวัตกรรมที่ค่อนข้างเก่า , ตามออกของวิกิพีเดียJIT รวบรวมบทความ "คอมไพเลอร์ JIT ที่ได้รับการตีพิมพ์ครั้งแรกนั้นมีสาเหตุมาจากการทำงานบน LISP โดย McCarthy ในปี 1960 " "Smalltalk (c. 1983 ) เป็นผู้บุกเบิกด้านใหม่ของการรวบรวม JIT ตัวอย่างเช่นการแปลรหัสเครื่องทำได้ตามความต้องการและผลลัพธ์ถูกแคชไว้เพื่อใช้ในภายหลังเมื่อหน่วยความจำขาดแคลนระบบจะลบรหัสนี้และสร้างใหม่ เมื่อมันต้องการอีกครั้ง " เหตุใดจึงต้องได้รับการตีความ …

3
ฉันควรรวมการทดสอบในอิมเมจ Docker หรือไม่
เมื่อพูดถึงการทดสอบฉันสามารถนึกถึงสองตัวเลือก: ใส่ทั้งการทดสอบและแอปพลิเคชันในภาพเดียว รวมเฉพาะรหัสแอปพลิเคชันในภาพ สร้างคอนเทนเนอร์เฉพาะของการทดสอบที่สร้างขึ้นหลังจากอิมเมจหลักและเพิ่มเลเยอร์บางอย่างลงในนั้น (รหัสทดสอบการอ้างอิงและอื่น ๆ ) ด้วยตัวเลือกแรกฉันสามารถทดสอบคอนเทนเนอร์และจัดส่งตรงตามที่ได้รับการทดสอบ ข้อเสียที่ชัดเจนคือรหัสที่ไม่จำเป็น (และอาจมีการทดสอบข้อมูล) จะรวมอยู่ในภาพ ด้วยตัวเลือกที่สองรูปภาพที่ส่งมานั้นไม่เหมือนกับภาพที่ถูกทดสอบ ทั้งคู่ดูเหมือนกลยุทธ์ที่ไม่ดี มีสามกลยุทธ์ที่ดีกว่าหรือไม่?

2
คลาสกับโมดูลใน Python
Python มีโมดูลมากมาย (เช่นre) ที่ทำชุดของการกระทำเฉพาะ คุณสามารถเรียกใช้ฟังก์ชั่นของโมดูลนี้และรับผลลัพธ์และโมดูลโดยรวมมีแนวคิดอยู่เบื้องหลัง (ในกรณีนี้คือการจัดการกับนิพจน์ทั่วไป) คลาสดูเหมือนจะทำสิ่งเดียวกันเกือบทั้งหมด แต่พวกมันดูเหมือนจะใช้คุณสมบัติค่อนข้างมากกว่าโมดูล โมดูลแตกต่างจากคลาสอย่างไร? (ฉันรู้ว่าฉันไม่สามารถคลาสย่อยโมดูลได้ แต่มันคืออะไร) ฉันควรใช้คลาสแทนโมดูลเมื่อใด
19 class  modules 

2
ความหมายของ 'ฟิกซ์เจอร์' ต่างกันอย่างไร?
ฉันมีปัญหาในการเข้าใจแนวคิดของ "การติดตั้ง" ฉันรู้ว่าชุดทดสอบคืออะไรกรณีทดสอบเรียกใช้การทดสอบ แต่ "ฟิกซ์เจอร์" คืออะไร กรณีทดสอบแปร? สำหรับฉันแล้วความหมายหรือความหมายของคำว่า "ฟิกซ์เจอร์" อาจแตกต่างกันเล็กน้อยโดยภาษาการเขียนโปรแกรมหรือโดยการทดสอบกรอบ? ฉันคิดว่าการติดตั้งแบบ phpunit " รหัสเพื่อตั้งโลกขึ้นมาอยู่ในสถานะที่เป็นที่รู้จักและจากนั้นกลับสู่สภาพเดิมเมื่อการทดสอบเสร็จสมบูรณ์. รัฐนี้เป็นที่รู้จักกันจะเรียกว่าการติดตั้งการทดสอบ. " แตกต่างจาก " fitnesse fixture " เล็กน้อย " การติดตั้งเป็นสะพานเชื่อมระหว่างหน้า Wiki และ System Under Test (SUT) ซึ่งเป็นระบบจริงที่จะทดสอบ " มีผู้เชี่ยวชาญในการทดสอบซอฟต์แวร์แถวนี้ที่สามารถตอบคำถามนี้ได้หรือไม่ ยินดีต้อนรับการอ้างอิงถึงภาษาการเขียนโปรแกรมอื่น ๆ

7
สำนวนคืออะไร?
ฉันเข้าใจ "สำนวน" เพื่อเป็นการดำเนินการทั่วไปหรือรูปแบบที่ในภาษาเฉพาะไม่ง่ายโดยไวยากรณ์ภาษาหลักเช่นการเพิ่มจำนวนเต็ม: i = i + 1; ใน C ++ สำนวนนี้จะทำให้ผู้ปฏิบัติงานง่ายขึ้น: ++i; อย่างไรก็ตามเมื่อมีคนใช้คำว่า "สำนวน" ฉันไม่แน่ใจว่าจะเข้าใจมันอย่างไร อะไรทำให้ชิ้นส่วนของรหัส "สำนวน"?
19 c++  idioms 

5
วิธีที่เหมาะสมในการซิงโครไนซ์ข้อมูลข้าม microservices คืออะไร
ฉันค่อนข้างใหม่กับสถาปัตยกรรมไมโครเซอร์วิส เรามีเว็บแอปพลิเคชันขนาดปานกลางและฉันชั่งน้ำหนักข้อดีและข้อเสียของการแบ่งมันออกเป็น microservices แทนระบบเสาหินที่เราได้ก้าวไปข้างหน้า เท่าที่ฉันเข้าใจพิจารณา microservices AและBแต่ละรายการนั้นอาศัยชุดย่อยของข้อมูลที่อีกฝ่ายมี หากข้อความถูกโพสต์โดยAบอกว่ามีบางอย่างเปลี่ยนแปลงBสามารถใช้ข้อความนั้นและทำซ้ำสำเนาของAข้อมูลในเครื่องและใช้สิ่งนั้นเพื่อทำสิ่งที่Bต้องทำ อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าBลงไป / ล้มเหลวและหลังจากนั้นไม่นานก็กลับมาอีกครั้ง ในช่วงเวลาดังกล่าวAได้เผยแพร่ข้อความอีกสองข้อความ จะBทราบวิธีการอัปเดตAข้อมูลในเครื่องได้อย่างไร? จริงอยู่ถ้าBเป็นผู้บริโภคAคิวเพียงคนเดียวก็สามารถเริ่มอ่านได้เมื่อกลับมาออนไลน์ แต่จะเกิดอะไรขึ้นถ้ามีผู้บริโภครายอื่นของคิวนั้นและข้อความเหล่านั้นถูกบริโภค? เป็นตัวอย่างที่ชัดเจนยิ่งขึ้นถ้าUsersบริการมีการปรับปรุงที่อยู่อีเมลในขณะที่บริการBillingไมโครซอฟต์ล่มหากบริการBillingไมโครซอฟท์กลับมาอีกครั้งจะรู้ได้อย่างไรว่าอีเมลนั้นได้รับการปรับปรุงแล้ว? เมื่อ microservices กลับมารายการออกอากาศจะพูดว่า "เฮ้ฉันสำรองข้อมูลเอาข้อมูลปัจจุบันของคุณทั้งหมดให้ฉันหรือเปล่า" โดยทั่วไปแล้ววิธีปฏิบัติทางอุตสาหกรรมที่ดีที่สุดสำหรับการซิงโครไนซ์ข้อมูลคืออะไร

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

6
ลอง / จับ / บันทึก / Rethrow - เป็นรูปแบบการต่อต้านหรือไม่
ฉันสามารถดูโพสต์ได้หลายแห่งซึ่งมีความสำคัญของการจัดการข้อยกเว้นที่ตำแหน่งศูนย์กลางหรือที่ขอบเขตกระบวนการได้รับการเน้นว่าเป็นแนวปฏิบัติที่ดีแทนที่จะทิ้งขยะบล็อคโค้ดทุกอันรอบลอง / จับ ฉันเชื่ออย่างยิ่งว่าพวกเราส่วนใหญ่เข้าใจถึงความสำคัญของมัน แต่ฉันเห็นคนยังคงลงท้ายด้วยรูปแบบการป้องกัน catch-log-rethrow เป็นหลักเพราะเพื่อความสะดวกในการแก้ไขปัญหาในระหว่างการยกเว้นพวกเขาต้องการบันทึกข้อมูลเฉพาะบริบทเพิ่มเติม ผ่าน) และวิธีคือการห่อวิธีรอบลอง / catch / log / rethrow public static bool DoOperation(int num1, int num2) { try { /* do some work with num1 and num2 */ } catch (Exception ex) { logger.log("error occured while number 1 = {num1} and number 2 = …

2
การออกแบบ REST API: การโทรหลายครั้งกับการโทรครั้งเดียวไปยัง API
เรากำลังพัฒนา Rest API สำหรับเว็บไซต์อีคอมเมิร์ซซึ่งแอพมือถือจะถูกใช้งาน ในหน้าแรกของแอพเราจำเป็นต้องโทรหาแหล่งข้อมูลมากมายเช่นสไลเดอร์แบรนด์ยอดนิยมสินค้าขายดี สองตัวเลือกในการโทรด้วย API: โทรเดียว: www.example.com/api/GetAllInHome โทรหลายสาย: www.example.com/api/GetSliders www.example.com/api/GetTopBrands www.example.com/api/GetBestSellingProducts www.example.com/api/GetTrendingProducts ซึ่งเป็นวิธีที่ดีที่สุดสำหรับการออกแบบ api พักผ่อน - โทรเดียวหรือหลายอธิบายข้อดีและข้อเสีย? ซึ่งจะใช้เวลามากขึ้นในการตอบสนองต่อการร้องขอ?
19 rest  api  api-design  url 

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