Как правило, модель REST может быть отображена непосредственно как «Объект» <-> «Представление» и «OID / References» <-> «URI». Итак, во-первых, вам нужно назначить каждому из элементов, присутствующих в игре, свой URI.
Вариант 1
Допустим, вы используете JSON для описания персонажа, поэтому у вас будет что-то вроде этого:
URL : / персонаж / Воин
Содержание
{ "name" : "Warrior", "weapon" : "/weapons/id_of_weapon" }
Обратите внимание, что «оружие» включает в себя ссылку (или массив из них) на различные виды оружия, которыми обладает персонаж. Каждый из них, следуя принципу REST, идентифицируется URI.
Теперь у вас есть два варианта поддержки варианта типа / подтипа:
Использовать разные типы MIME
Когда вы получите ресурс /weapons/id_of_weapon
, вы получите, скажем, ответ от сервера, в котором заголовки выглядят так:
HTTP/1.1 200 OK
...
Content-Type: my-game/Knife
... (more headers)
Knife data Content
Указывает фактический тип возвращаемого элемента и может использоваться для сопоставления его с другим подтипом. Вы можете использовать разные схемы, такие как Weapon/Knife
или MyGameObject/Weapon_Knife
.
Использовать сопоставление объектов на основе содержимого
Кроме того, вы можете явно указать тип возвращаемого экземпляра. В этом случае вы можете получить ответ, подобный следующему:
HTTP/1.1 200 OK
...
Content-Type: application/json
... (more headers)
{ "type" : ["Weapon", "Knife"] , ... (rest of fields) }
Обратите внимание, как параметр JSON type
используется в качестве стандарта в вашей игре для указания различных типов, поддерживаемых этими возвращаемыми данными.
Вариант 2
Вы также можете подумать, что после редактирования вы можете имитировать архитектуру содержания ресурса в URI. Тем не менее, вы предлагаете http://whatever/character/sword
. Это не подходит, потому что вы называете классы, а не ресурсы. Более подходящая схема URL будет выглядеть примерно так:
http://whatever/character/idc/weapon/idw
где idc
и idw
- идентификаторы персонажа и оружия соответственно. Обратите внимание, что вы не фиксируете точный тип оружия в URI ресурса (то есть вы должны сказать weapon
, а не knife
), , но может случиться так, что на самом деле оружие с id idw
на самом деле имеет тип Knife
(используя любой из параметров, указанных выше).
Если вы сопоставите локализацию с URI, вы также можете иметь более компактный формат для символа:
{ "id": "idc",
"name" : "Warrior",
"weapon" : { "id": "idw", "type": "Knife", (rest of knife properties) }
}
Обратите внимание, как: у каждого элемента есть свой id
. Сдерживание наблюдается посредством включения рекурсивного объекта JSON, вы также указываете тип оружия, и, тем не менее, вы можете сопоставить только что описанную схему URL, чтобы получить доступ к внутренним элементам персонажа.