“ Public APIs อยู่ตลอดกาล: โอกาสเดียวเท่านั้นที่จะทำให้ถูกต้อง”?


20

ในหนังสือ OS ฉันเพิ่งอ่านว่า "Public APIs อยู่ตลอดกาล: โอกาสเดียวเท่านั้นที่จะทำให้ถูกต้อง" จริงป้ะ? มันใช้ได้เฉพาะใน API ของระบบปฏิบัติการหรือ API อื่น ๆ ด้วยหรือไม่ ตัวอย่างเช่นสิ่งนี้จะเป็นจริงสำหรับ API ของแอปพลิเคชัน Android เช่น Tasker, Locale และ Pushover หรือไม่


2
ฉันจะขยายหลักการไปที่รหัสทั้งหมด มีเวลาไม่เพียงพอที่จะเขียนสิ่งเดียวกันหลาย ๆ ครั้ง การเขียนโค้ดที่สมบูรณ์แบบเป็นทักษะที่สามารถเรียนรู้ได้
tp1

22
@ tp1: การเขียนโค้ดที่สมบูรณ์แบบเป็นทักษะที่ไม่มีอยู่จริงในโลกแห่งความเป็นจริง
Michael Borgwardt

4
@michael borgwardt: เพียงแค่เลือกรุ่นที่สมบูรณ์แบบที่จะใช้
tp1

1
ฉันได้เห็นสิ่งนี้ในโลกแห่งความเป็นจริงและขึ้นอยู่กับประเภทของ API บทเรียนที่ได้เรียนรู้: ข้อกำหนดแรกใน API ของเว็บ "สาธารณะที่เผชิญหน้า" คือความสามารถสำหรับผู้ใช้ API ในการเลือกเวอร์ชันของ API ที่พวกเขาจะใช้
Josh Petitt

คำตอบ:


32

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

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


2
"ทั้งปัญหาทางเทคนิคที่ยากและปัญหาทางเทคนิคที่ยาก" คุณทำซ้ำ "เทคนิค" สองครั้ง
luiscubal

12
@ luiscubal: นั่นเป็นเพราะปัญหาทางเทคนิคที่ยากมากจริงๆ
Michael Borgwardt

3
@luiscubal คุณหมายถึงครั้งเดียว ซ้ำแล้วซ้ำอีกครั้งพูดสองครั้ง
Joe Z.

4
"คำตอบสาธารณะไม่ถาวร ... "
Chris

3
@Chris ไม่จริง คำตอบของจัสตินไม่สามารถใช้งานได้กับความคิดเห็นของ luiscubal อีกต่อไป :-)
svick

12

ผู้เขียนอ้างว่าเป็นโจชัวโบลชคำสั่งมาจากบทความการออกแบบ APIของBumper-Sticker :

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

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

  • หากคุณโปรแกรมคุณเป็นผู้ออกแบบ API

    • รหัสที่ดีเป็นแบบแยกส่วน - แต่ละโมดูลมี API
  • โมดูลที่มีประโยชน์มักจะถูกนำมาใช้ซ้ำ

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

Slide Conclusionเน้นเรื่องนี้เป็นวิธีการทั่วไป:

  • การออกแบบ API เป็นงานฝีมือที่ยอดเยี่ยมและคุ้มค่า

    • ปรับปรุงจำนวนโปรแกรมเมอร์ผู้ใช้งาน บริษัท ...

2
ในทางเทคนิคเพชรเป็น metastable อุณหพลศาสตร์พูดกราไฟท์เป็นรูปแบบของคาร์บอนที่มีเสถียรภาพมากขึ้น
detly

3

API เปลี่ยนแปลงอยู่เสมอมิฉะนั้นจะมีจุดประสงค์ในการอัปเกรดระบบอย่างไร เปลี่ยน internals เท่านั้น?

ระบบแต่ละเวอร์ชันจะนำ API ใหม่มาใช้ API เก่าจะล้าสมัยและ API ที่ล้าสมัยจะหายไป

การเปลี่ยนแปลง API จะต้องระมัดระวังอย่างมากทั้งในด้านเทคนิคและในแง่ของการสื่อสาร


ตราบใดที่คุณสามารถ commuincate ดีกับผู้บริโภคทั้งหมดของคุณและพวกเขาสามารถพูดคุยทีผู้ใช้ของพวกเขา - ดูที่ใช้ Windows: Windows มีตันเก่าเลิกใช้ API ที่เลวร้ายอย่างที่ผู้ใช้ end เช่นการใช้งานเก่ามากแม้ในระบบที่ทันสมัย
โยฮันเน

2

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

ปัญหากำลังสนับสนุนอินฟินิตี้โฆษณา API ดั้งเดิมนั้น ... ฉันคิดว่ามันขึ้นอยู่กับการใช้ API เก่าและคุณค่าของผู้ใช้ API เหล่านั้นที่มีต่อคุณ

กลับไปที่ 'ยุคเก่า' ของ Windows 3.x และ 9x เป็นต้นเมื่อเปิดตัว OS API เหล่านั้นจะถูกสร้างและตั้งค่า ตอนนี้มีการผลักดันการอัปเดตระบบปฏิบัติการอยู่ตลอดเวลาดังนั้น API ใหม่จึงสามารถเปิดตัวได้ แต่ฉันคิดว่าตราบใดที่คุณใช้งานระบบปฏิบัติการเฉพาะ (รุ่นใหญ่) API เหล่านั้นจะถูกเพิ่มลงไปเท่านั้นไม่สามารถลบ ... เป็นกรณีสำหรับรุ่นใหญ่ 'ถัดไป' แม้ว่า

อืมข้าอาจจะหลงทางจากคำถามเดิม


1

ขึ้นอยู่กับว่ามันเป็น API ประเภทใด (และฉันกำลังสมมติว่าจะมีการเปลี่ยนแปลงอย่างอื่นมิเช่นนั้นข้อความนั้นไม่เป็นความจริง)

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

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

มีผู้ให้บริการ API อย่างน้อยหนึ่งรายที่แนะนำการเปลี่ยนแปลงอย่างต่อเนื่องใน API และประสบความสำเร็จอย่างน่าขัน: Facebook แต่พวกเขาจัดการการเปลี่ยนแปลงอย่างระมัดระวัง: มีนโยบายที่เผยแพร่การเปลี่ยนแปลงที่มีการประกาศและอธิบายอย่างน้อย 90 วันล่วงหน้าและผู้พัฒนาสามารถเลือกที่จะเปิดใช้งานได้เร็วกว่ากำหนดภายในระยะเวลาดังกล่าว


1

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


0

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


-1

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

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

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