Агностический API-интерфейс

Я планирую разместить веб-сервис или какую-либо другую услугу, открытую через Интернет. Я хотел бы создать API для взаимодействия приложений с этой службой. Я бы хотел, чтобы API можно было использовать на разных языках, таких как Java, С++, С# или PHP. Как я могу поддерживать одну базовую базу кода для моего API, но распределять красивые упакованные двоичные файлы для всех этих языков? Кроме того, я могу подумать, что это может быть и перекрестная платформа.

Обновление 1

Я нахожусь в первых числах на веб-сервисах, но я что одним из ключевых моментов является то, что множество инструментов поддерживает внедрение клиентов на основе описание сервиса, такого как WDSL. Я не доставлял клиентскую сторону программное обеспечение с чем-либо, что я сделал, я ожидать, что любой пользователь сможет построить их собственные клиенты, подходящие для их необходимо. --Brabster Отвечать

Я не против создания прямой веб-службы, а затем выдача WSDL файла. Но что, если я хочу, чтобы клиентский API выполнял некоторую логику, шифрование, проверку ошибок или так далее?

Обновление 2

В ожидании клиента, который используя ваш API, чтобы что-либо сделать, вы не могу! Нет ничего, что вы будете способный сделать, чтобы потребитель API будет делать все правильно. Вот почему надежная обработка ошибок важный. Вы должны проверить и удвоить проверить все и все, что приходит от клиента. Вы всегда должны быть подозрительно, и даже предположить, что это злонамеренно. Там действительно нет хороший способ обойти этот факт. --Ryan Guill Отвечать

Моя первоначальная идея состояла в том, чтобы создать DLL или Assembly в .NET, затем клиент делает вызовы в этот код, который работает на стороне клиента. Этот код может разговаривать по любому протоколу связи обратно на сервер, но мой API будет работать на своем поле. Я думаю, что REST этого не делает. Кажется, что в REST все по-прежнему является HTTP-сообщением. Это почти веб-сервисы с мылом.

Обновление 3

Я принял ответ Райана Гилла. Я думаю, что общая идея заключается в том, что мне нужно разоблачить сетевую услугу, имеющую самый низкий барьер для клиента. Таким образом, любой может подключиться. Затем просто запустите весь мой код на сервере. Это кажется принятым как единственное желание действительно достичь платформы и языковой независимости, которой я занимаюсь.

Спасибо за все входные данные.

Ответ 1

Я бы использовал REST API, подобно тому, как работает Flickr API: http://flickr.com/services/api/

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

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

Дополнительная информация здесь: http://www.xfront.com/REST-Web-Services.html

Обновление. Заявитель добавил в сообщение следующее:

Я не против создания прямой веб-службы, а затем выдача WSDL файла. Но что, если я хочу, чтобы клиентский API выполнял некоторую логику, шифрование, проверку ошибок или так далее?

Мне лично не нравится использовать SOAP (используя WSDL). Существует много накладных расходов на использование SOAP, как на сервере, так и на клиенте. Я думаю, именно поэтому вы видите все больше публичного API, написанного с помощью REST. Это действительно снижает барьер для входа в самый низкий общий знаменатель, позволяя использовать все, что может использовать базовый HTTP (GET и POST (также PUT и DELETE для "правильного" способа сделать это)) для использования API.

Еще несколько примеров открытого API, написанных с использованием REST: twitter, vimeo, Google

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

Обновление 2:, заявитель добавил к сообщению следующее:

Моя первоначальная идея состояла в том, чтобы создать DLL или Assembly в .NET, затем клиент делает вызовы в этот код, который работает на стороне клиента. Этот код может разговаривать по любому протоколу связи обратно на сервер, но мой API будет работать на своем поле. Я думаю, что REST этого не делает. Кажется, что в REST все по-прежнему является HTTP-сообщением. Это почти веб-сервисы с мылом.

Конечно, вы можете это сделать, но это будет работать только для языков .NET, что означает, что ваши кросс-платформенные и кросс-языковые преимущества выходят из окна. И все же, в конце концов, вы действительно что-то предотвращаете? Разработчик собирается использовать ваш удаленный API или локальную DLL или сборку. В любом случае, он должен будет знать, как использовать его и использовать его правильно, иначе вы собираетесь выбросить ошибку. Все, что вы на самом деле делаете, меняется там, где возникают ошибки. Что может быть важно для вас (если да, укажите, почему), но на самом деле ничего не меняет в уравнении.

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

Ответ 2

Я нахожусь в первых числах веб-сервисов, но я думаю, что одним из ключевых моментов является то, что множество инструментов поддерживает реализацию клиентов на основе описания службы, например WDSL.

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

Если вы посмотрите API-интерфейс flickr, как предлагается одним из ваших других ответов, я не думаю, что они поставляют код на стороне клиента, другие люди создали и внесли свой вклад на стороне клиента.

Ответ 3

Я предлагаю написать API на языке программирования Haxe, чтобы исходный код можно было перевести на все языки программирования, о которых вы говорили. Язык программирования Haxe может быть переведен (или "скомпилирован" ) на все языки программирования, упомянутые в исходном сообщении, а также несколько других.

Ответ 4

Простой ответ, нет.

Комплексный ответ: создайте API и скомпилируйте его в dll COM. Затем просто создайте код оболочки для языков, которые не могут справиться с этим.

Простой ответ # 2, сделайте первоначальную услугу настолько тривиальной или общеприемлемой, чтобы не требовать API (я обычно реализовал это посредством опроса базы данных на стороне сервера. Ужасно, но любой язык, который может обращаться к базе данных, может использовать программа).