Обнаружение RESTful API во время выполнения / дизайн клиента HATEOAS

Для стартапа SaaS, в котором я участвую, я создаю как веб-API RESTful, так и несколько клиентских приложений на разных платформах которые потребляют это. Я думаю, что разобрался с API, но теперь перехожу к клиентам. Читая о REST, я вижу, что ключевой частью REST является открытие , но, похоже, есть много споров между двумя разными интерпретациями того, что на самом деле означает открытие:

  1. Открытие разработчика : разработчик жестко кодирует в клиенте огромное количество деталей API, таких как URI ресурса, параметры запроса, поддерживаемые методы HTTP и другие детали, которые он обнаружил при просмотре документации и экспериментировании с ответами API. Этот тип обнаружения IMHO требует классной привязки и вопроса управления версиями API, а также приводит к жесткой привязке клиентского кода к API. Кажется, не намного лучше, чем при использовании хорошо документированной коллекции RPC.

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

Обнаружение среды выполнения кажется святым Граалем REST, но я вижу очень мало дискуссий о том, как реализовать такой клиент. Почти все источники REST, которые я нашел, похоже, предполагают открытие разработчика. Кто-нибудь знает о некоторых ресурсах для обнаружения во время выполнения? Лучшие практики? Примеры или библиотеки с реальным кодом? Я работаю на PHP (Zend Framework) для одного клиента. Objective-C (iOS) для другого.

Является ли обнаружение среды выполнения реалистичной целью с учетом нынешнего набора инструментов и знаний в сообществе разработчиков? Я могу написать своему клиенту, чтобы он обрабатывал все URI непрозрачным образом, но как сделать это наиболее эффективно - это вопрос, особенно для соединений с низкой пропускной способностью. В любом случае, URI - это только часть уравнения. А как насчет шаблонов ссылок в контексте выполнения? Как насчет того, чтобы сообщить, какие методы поддерживаются, помимо выполнения большого количества запросов OPTIONS?

77
задан curtisdf 10 February 2012 в 17:22
поделиться