Для стартапа SaaS, в котором я участвую, я создаю как веб-API RESTful, так и несколько клиентских приложений на разных платформах, которые его используют. Я думаю, что разобрался с API, но теперь перехожу к клиентам. Читая о REST, я вижу, что ключевой частью REST является открытие , но, похоже, существует много споров между двумя различными интерпретациями того, что на самом деле означает открытие:
Обнаружение разработчика : разработчик жестко кодирует в клиенте огромное количество деталей API, таких как URI ресурса, параметры запроса, поддерживаемые методы HTTP и другие детали, которые он обнаружил при просмотре документации и экспериментировании с ответами API. Этот тип обнаружения IMHO требует прохладной связи и вопроса управления версиями API, а также приводит к жесткой привязке клиентского кода к API. Кажется, ненамного лучше, чем при использовании хорошо документированной коллекции RPC.
Обнаружение во время выполнения. Само клиентское приложение способно выяснить все, что ему нужно, с небольшим количеством внеполосной информации или без нее (предположительно, только с информацией о типах носителей, с которыми имеет дело API). Ссылки могут быть горячими. Но для того, чтобы сделать API очень эффективным, кажется, что требуется много шаблонов ссылок для параметров запроса, что заставляет всплывать обратно внеполосная информация. Возможно, существуют другие трудности, о которых я еще не подумал, так как я не дошли до этой точки в разработке. Но мне нравится идея слабой связи.
Обнаружение среды выполнения кажется святым Граалем REST, но я вижу очень мало дискуссий о том, как реализовать такой клиент. Почти все источники REST, которые я нашел, похоже, предполагают открытие разработчика. Кто-нибудь знает о некоторых ресурсах для обнаружения во время выполнения? Лучшие практики? Примеры или библиотеки с реальным кодом? Я работаю на PHP (Zend Framework) для одного клиента. Objective-C (iOS) для другого.
Является ли обнаружение среды выполнения реалистичной целью с учетом нынешнего набора инструментов и знаний сообщества разработчиков? Я могу написать своему клиенту, чтобы он обрабатывал все URI непрозрачным образом, но как сделать это наиболее эффективно - это вопрос, особенно для соединений с низкой пропускной способностью. В любом случае, URI - это только часть уравнения. А как насчет шаблонов ссылок в контексте выполнения? Как насчет того, чтобы сообщить, какие методы поддерживаются, помимо выполнения множества запросов OPTIONS?