«Публичные API вечны: только один шанс сделать это правильно»?

20

В книге об ОС я только что прочитал: «Публичные API вечны: только один шанс сделать это правильно». Это правда? Это применимо только в API операционных систем или других API тоже? Например, будет ли это так для API-приложений Android, таких как Tasker, Locale и Pushover?

Md Mahbubur Rahman
источник
2
Я бы расширил принцип на весь код. Просто не хватает времени написать одно и то же несколько раз. Написание идеального кода - это навык, которому можно научиться.
tp1
22
@ tp1: написание идеального кода - это навык, которого нет в реальном мире.
Майкл Боргвардт
4
@michael borgwardt: Просто нужно выбрать, какую версию идеально использовать.
tp1
1
Я видел это в реальном мире, и это зависит от того, какой тип API. Извлеченный урок: первое требование в любом «публичном» веб-API - это возможность для пользователя API выбирать, какую версию API они будут использовать.
Джош Петитт

Ответы:

32

Как правило, это верно для любого публичного API, да. Как только вы предоставляете API для публики, и люди начинают создавать приложения, которые зависят от этого API, изменить API становится чрезвычайно сложно, потому что это нарушит все эти приложения. Это, как правило, сложная техническая проблема и сложная политическая проблема.

Конечно, можно изменить публичный API. Например, бывает, что проекты будут ограничивать API в одном выпуске, вводят новый API, а затем удаляют старый API в некоторых будущих выпусках. Но это предполагает, что каждое (важное) приложение, которое использует старый API, будет переписано для использования нового API до удаления старого API. Это часто занимает несколько лет. А это значит, что владелец общедоступного API накладывает расходы на каждый другой проект, который использует API. Поскольку, как правило, потребителей API гораздо больше, они, как правило, являются относительно сильным политическим лобби.

Джастин Кейв
источник
2
«Как сложная техническая проблема, так и сложная техническая проблема» Вы повторили «техническую» дважды.
luiscubal
12
@luiscubal: это потому, что это чертовски сложная техническая проблема.
Майкл Боргвардт
3
@luiscubal Вы имеете в виду один раз. Повторил один раз, сказал дважды.
Джо З.
4
«Публичные ответы не вечны ...»
Крис
3
@ Крис Не совсем. Ответ Джастина теперь больше не совместим с комментарием Луискубаля. :-)
svick
12

Автор цитаты - Джошуа Блох, заявление взято из его статьи о дизайне Bumper-Sticker API :

Публичные API, как и бриллианты, вечны. У вас есть один шанс сделать все правильно, поэтому приложите все усилия.

Подробнее об этом автор рассказывает читателям в своей презентации на конференции «Как разработать хороший API и почему это важно» . Слайд « Почему дизайн API важен для вас?» Довольно ясно заявляет, что это имеет отношение к любой деятельности по программированию (операционные системы или нет, не имеет значения для автора):

  • Если вы программируете, вы дизайнер API

    • Хороший код является модульным - у каждого модуля есть API
  • Полезные модули, как правило, используются повторно

    • Как только модуль имеет пользователей, не может менять API по желанию
    • Хорошие многоразовые модули - корпоративные активы
  • Мышление с точки зрения API улучшает качество кода

Слайд Заключение также подчеркивает это как общий подход:

  • API дизайн - благородное и полезное ремесло

    • Улучшает работу программистов, конечных пользователей, компаний ...
комар
источник
2
Технически алмаз метастабилен. Термодинамически говоря, графит является более стабильной формой углерода.
детально
3

API-интерфейсы всегда меняются, иначе какой смысл обновлять систему? Менять только внутренности?

Каждая версия системы приносит новые API, старые API устаревают, а устаревшие API исчезают.

Изменение API должно быть очень осторожным как с технической точки зрения, так и с точки зрения коммуникации.

mouviciel
источник
До тех пор, пока вы можете хорошо общаться со всеми вашими потребителями, и они могут общаться со своими пользователями - посмотрите на Windows: в Windows есть тонны старых, устаревших, плохих API, поскольку конечным пользователям нравится запускать очень старые приложения даже в современных системах
Йоханнес
2

Мое мнение таково, что однажды выпущенная «версия» API навсегда, но вы можете отказаться от нее, выпустив API «2.0» (есть несколько примеров, когда это происходит - в настоящее время я могу вспомнить, что Strava выпустила). версия 2.0 API для разработки против использования их услуг).

Проблема заключается в поддержке этого оригинального API до бесконечности ... Я полагаю, что это зависит от использования старого API и от того, какое значение имеют эти потребители API.

Возвращаясь к «старым временам», скажем, Windows 3.x и 9x и т. Д., После выпуска эти API-интерфейсы для ОС были созданы и настроены. Теперь обновления ОС загружаются все время, поэтому можно выпускать новые API, но я думаю, что пока вы работаете с определенной разновидностью ОС (основной выпуск), эти API будут только добавляться, а не удаляться ... может и не быть будь случай для 'следующего' основного выпуска все же.

Хм, может быть, я отклонился от первоначального намерения.

MAICh
источник
1

Это зависит от того, какой это API (и я предполагаю критические изменения, в противном случае утверждение явно не соответствует действительности).

Если вызывающий может выбрать, какую версию он использует (например, с библиотеками / средами, которые связаны с вызывающим приложением), то изменение API не является большой проблемой - но все же плохо сказывается на репутации программного обеспечения. Людям нравится обновляться без проблем.

С другой стороны, когда люди не могут продолжать использовать старую версию API (например, с онлайн-службой или такими вещами, как браузер или ОС, где запуск старых версий очень нежелателен), тогда изменение API несовместимым способом очень плохо на самом деле, поскольку он сломает все программное обеспечение, которое его использует, а также не обновляется. Это налагает затраты на обслуживание на разработчиков, и они будут ненавидеть вас за это. А программное обеспечение, которое не обслуживается и ломается, плохо отразится и на вас.

С другой стороны, есть по крайней мере один провайдер API, который постоянно вносит серьезные изменения в API и в любом случае смехотворно успешен: Facebook. Но они управляют изменениями очень осторожно: существует опубликованная политика , о критических изменениях объявляется и объясняется по крайней мере за 90 дней до начала, и разработчики могут активировать их рано в течение этого периода времени.

Майкл Боргвардт
источник
1

Если у вас есть предвидение, чтобы включить номер версии в самом API. Либо при вызове соединения / инициализации, либо где-то рядом с началом списка параметров при каждом вызове, ваш API может развиваться и изменяться со временем, не нарушая работу существующих клиентов.

Джеймс Андерсон
источник
0

Хотя все, что мы делаем, - это чтобы они были лучшими за один раз, но с течением времени наступают перемены и улучшения, иногда нам нужно обновлять информацию, как это делали многие гигантские провайдеры (например, обновление фейсбука несколько, твиттер одно главное) Обращаясь к oAuth и нескольким основным, но, по большей части, все идет с улучшением, поэтому никаких частых изменений нет. И да, пожалуйста, не прекращайте поддерживать старый, это больно !! :)

rptwsthi
источник
-1

Каждый раз, когда вы выпускаете какой-либо протокол связи, который, очевидно, включает в себя API, у вас есть один шанс сделать это правильно в том смысле, что протокол / интерфейс должен быть обратно совместим и расширяем.

Это позволяет добавлять новые функции и выпускать новые версии, не беспокоясь о том, чтобы сломать людей, использующих старые версии. Никогда в мире программного обеспечения не возникнет ситуация, когда вы можете просто жестко переключаться в определенный момент времени, и все отбрасывают старую версию и начинают использовать новую версию.

Фред Томсен
источник