2012-05-02 1 views
2

У меня есть несколько различных API-интерфейсов с различными схемами, сериализованными в XML или JSON, которые мне нужно выводить как стандартизованную схему.Как мне построить API-конвертер?

Основные характеристики необходимы:

  • сериализации в XML и JSON
  • Authentication
    • Ie: не могут получить/установить данные, если у вас нет правильного пользователя + пас
  • Роль/Ограничение сферы применения
    • Т.е. вы не можете получить доступ ко всему в нашей базе данных, только то, что ваша роль позволяет
  • Get/Set (преобразование) между различными схемами
    • Ie: Независимо от входного API, вы можете получить его отформатирован в зависимости от того, выход API вы запрашиваете

Или поставить его визуально:

Server1> [отправить в SOAP 1.1]> [Мой сервер]> [Server3 получает в XML в SERVER3 схемы]

SERVER3> [Отправить как XML]> [ Мой сервер]> [Сервер1 получает в качестве SOAP 1.1 в Server1 схеме]


Или поставить его programmically:

id=MyServer.read.SOAP[Server1.schema](Server1).id 
MyServer.send.XML[Server2.schema](data_get(id), Server2) 

Необходимо будет хранить все полученные данные в модели (базе данных), чтобы чтение было доступно по требованию.

Является ли это проблемой Slumber с TastyPie?

Или есть разные библиотеки, которые вы рекомендуете?

+0

Что именно означает «I.e .: не может получить/установить данные, если вы не из определенного DNS» означает? Это пахнет чем-то, что можно легко обойти путем подмены (http://en.wikipedia.org/wiki/IP_address_spoofing). –

+0

Правда, извините, пришел из мира внутренней маршрутизации, поэтому правильная аутентификация была не единственной, что приходило в голову. _Question edit_ –

ответ

1

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

Определенно имеет смысл внедрить услугу промежуточного уровня, которая выполняет повторную маршрутизацию, а также контроль доступа. TastyPie и Slumber помогают создать сам API-интерфейс останова, но похоже, что вы также хотите открыть SOAP API параллельно. Поэтому вам, вероятно, понадобится нечто вроде pysimplesoap или SOAPy для общей структуры данных в вашем промежуточном слое. (если вы можете избавиться от SOAP на выходе, ваша жизнь будет проще :).).

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

+0

Спасибо, просто изучил [PySimpleSOAP] (http://code.google.com/p/pysimplesoap) и изучил [web2py] (http://web2py.com) проблему. Не могли бы вы немного рассказать о различиях в парадигмах между [SOAP] (http://en.wikipedia.org/wiki/SOAP) и [REST] (http://en.wikipedia.org/wiki/REST)? - Я точно знаю, что мне нужно будет предоставлять обе службы одновременно из одних и тех же данных. –

+0

Они действительно очень разные. SOAP по существу дает вам возможность настроить канал сообщений, на который вы можете отправлять произвольные сообщения и объекты данных. Спецификации WSDL используются для определения всех этих типов. Это гибко, но позволяет создавать шаблоны, которые REST не поддерживает. REST основан на HTTP-примитивах и дает вам 7-8 операций верхнего уровня с известной семантикой, поэтому в некотором смысле это более ограничительный, чем SOAP, с другой стороны, нет реального эквивалента жесткой привязки спецификаций WSDL (есть такие фреймворки, как Swagger, WADL и т. Д., Но еще не широко используется). – steve

+0

Хм, просто читал статью [WSDL wiki article] (http://en.wikipedia.org/wiki/Web_Services_Description_Language), нашел немного неопределенным то, что с встроенными контроллерами REST в этот пример ... так будет SOAP в первую очередь используется для передачи двоичной информации, а REST - для передачи текстовой информации? - Но опять же это не имело бы смысла, поскольку все переводы SOAP в формате XML ... можете ли вы смягчить мое замешательство? –