Я разрабатываю сервис REST, который может использоваться многими типами клиентов, наиболее вероятно .Net, PHP, Flex и JavaScript. Я строю сервис, используя WCF и стартовый комплект REST. Одна из моих главных целей - сделать API-интерфейс максимально простым для всех этих клиентов.
Допустим, API работает с зоопарками. Когда клиент создает новый зоопарк, было бы хорошо, если бы он мог передать начальный набор животных, поэтому ему нужно всего лишь сделать один вызов API, например,
<Zoo>
<Name>My Zoo</Name>
<Animals>
<Snake>
<Name>Frank</Name>
<Length>2.5m</Name>
</Snake>
<Giraffe>
<Name>Alfred</Name>
<Height>10m</Height>
</Giraffe>
</Animals>
</Zoo>
Затем я хочу десериализовать XML в классы C # следующим образом:
List<Animal> Animals { get; set; }
class Animal { public string Name { get; set; } }
class Snake : Animal { public float Length { get; set; } }
class Giraffe : Animal { public float Height { get; set; } }
WCF это не нравится, так как он хочет отформатировать XML следующим образом:
<Zoo xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>My Zoo</Name>
<Animals>
<Animal i:type="Snake">
<Name>Frank</Name>
<Length>2.5m</Name>
</Animal>
<Animal i:type="Giraffe">
<Name>Alfred</Name>
<Height>10m</Height>
</Animal>
</Animals>
</Zoo>
Похоже, будет сложнее работать в клиенте без поддержки высококлассных инструментов, что вызывает много вопросов:
- Есть ли лучший дизайн для этого API?
- Будет ли второй формат проблемой для клиентов, не являющихся WCF?
- Могу ли я сделать WCF форматировать эти данные первым способом?
- Должен ли я вообще использовать эти типы иерархий в XML?