Разработка хорошего API - это искусство. Хороший API ценится даже по прошествии времени. На мой взгляд, не должно быть общего смещения на абстрактно-конкретной линии. Некоторые параметры могут быть такими же конкретными, как дни недели, некоторые требуют разработки для расширяемости (и довольно глупо делать их конкретными, например, частью имен функций), а еще один может пойти еще дальше и для того, чтобы иметь элегантный API-интерфейс, необходимый для обеспечения обратных вызовов, или даже предметно-ориентированный язык помогут бороться со сложностью.
Редко что-то новое происходит под луной. Взгляните на уровень техники, в особенности на установленные стандарты и форматы (например, многие вещи можно смоделировать после каналов, описания событий были разработаны в формате ical / vcal). Сделайте ваш API легко аддитивным, когда частые и вездесущие сущности являются конкретными, а предполагаемые расширения - словарями. Есть также несколько устоявшихся моделей для решения конкретных ситуаций. Например, обработка HTTP-запроса (и аналогичного) может быть смоделирована в API с объектами Request и Response.
Перед разработкой API проведите мозговой штурм по аспектам, включая те, которые не будут включены, но вы должны знать об этом. Примерами таких языков являются язык, направление письма, кодирование, локаль, информация о часовом поясе и тому подобное. Обратите внимание на места, где могут появляться кратные значения: используйте список, а не одно значение для них. Например, если вы разрабатываете API для системы видеочата, ваш API будет гораздо полезнее, если вы примете N участников, а не только двоих (даже если ваши спецификации на данный момент таковы).
Иногда абстрактность помогает значительно снизить сложность: даже если вы разрабатываете калькулятор для добавления только 3 + 4, 2 + 2 и 7 + 6, может быть намного проще реализовать X + Y (с технически выполнимыми границами для X и Y, и добавьте ADD (X, Y) к вашему API вместо ADD_3_4 (), ADD_2_2 (), ...
В общем, выбор того или иного способа - это просто техническая деталь. Ваша документация должна описывать случаи частого использования конкретным образом.
Что бы вы ни делали на стороне структуры данных, предоставьте поле для версии API.
Подводя итог, API должен минимизировать сложность при работе с вашим программным обеспечением. Чтобы оценить API, уровень выставленной сложности должен быть адекватным. Выбор формы API во многом зависит от стабильности проблемной области. Таким образом, должна быть некоторая оценка, в каком направлении будет расти программное обеспечение и его API, потому что эта информация может влиять на уравнение сложности. Кроме того, API дизайн для людей, чтобы понять. Если в области программных технологий есть хорошие традиции, постарайтесь не сильно отклоняться от них, так как это поможет их пониманию. Примите во внимание, для кого вы пишете. Более продвинутые пользователи оценят универсальность и гибкость, в то время как те, у кого меньше опыта, могут быть более довольны конкретикой. Тем не менее, заботиться о большинстве пользователей API там,
Что касается литературы, я могу порекомендовать ведущим программистам «Красивый код» объяснить, как они думают. Энди Орам, Грег Уилсон, считают, что красота заключается в том, чтобы воспринимать скрытую оптимальность (и пригодность для каких-то целей).