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