Соответствие между Atom и JSON
Описание ресурсов задается с помощью атрибутов. В API имена атрибутов ресурсов имеют следующую структуру:
namespace:name[@spec] (см. Таблицу 1 )
Правила именования атрибутов ресурсов позволяют установить однозначное соответствие между именем атрибута и его представлением в структуре данных Atom и JSON:
namespace соответствует префиксу пространства имён элемента name в формате Atom. В JSON-представлении не используется.
name соответствует одноимённому XML-элементу в формате Atom и ключу в ассоциативном массиве JSON.
@spec соответствует одноимённому XML-атрибуту элемента name в формате Atom и ключу в ассоциативном массиве JSON.
При этом если name или @spec содержит символы «-» или «_», то в ключе ассоциативного символа JSON данные символы удаляются, а следующий символ переводится в верхний регистр («hide_original»→ «hideOriginal»).
Поскольку ключи в ассоциативном не могут дублироваться, атрибуты с одинаковым name в JSON-представлении объединяются под ключом name в виде ассоциативного массива c ключами @spec .
Пример
Представление фотографии в формате Atom:
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:f="yandex:fotki"
xmlns:georss="http://www.georss.org/georss">
<id>urn:yandex:fotki:alekna:photo:425723</id>
<author>
<name>alekna</name>
</author>
<title>Задача</title>
<link href="http://api-fotki.yandex.ru/api/users/alekna/photo/425723/" rel="self" />
<link href="http://api-fotki.yandex.ru/api/users/alekna/photo/425723/" rel="edit" />
<link href="http://fotki.yandex.ru/users/alekna/view/425723/" rel="alternate" />
<link href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_orig" rel="edit-media" />
<link href="http://api-fotki.yandex.ru/api/users/alekna/album/156444/" rel="album" />
<published>2011-03-22T13:14:46Z</published>
<app:edited>2011-03-22T13:29:49Z</app:edited>
<updated>2011-03-22T13:29:49Z</updated>
<f:access value="public" />
<f:xxx value="false" />
<f:hide_original value="false" />
<f:disable_comments value="false" />
<f:img height="75" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XXS" size="XXS" width="75" />
<f:img height="480" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XL" size="XL" width="600" />
<f:img height="240" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_M" size="M" width="300" />
<f:img height="400" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_L" size="L" width="500" />
<f:img height="50" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XXXS" size="XXXS" width="50" />
<f:img height="120" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_S" size="S" width="150" />
<f:img height="80" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XS" size="XS" width="100" />
<f:img height="480" href="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_orig" size="orig" width="600" />
<georss:point>55.7040297333 37.6448710822</georss:point>
<content src="http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_orig" type="image/*" />
</entry>
Представление фотографии в формате JSON:
{
"edited": "2011-03-22T13:29:49Z",
"updated": "2011-03-22T13:29:49Z",
"img": {
"XXS": {
"width": 75,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XXS",
"height": 75
},
"XL": {
"width": 600,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XL",
"height": 480
},
"M": {
"width": 300,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_M",
"height": 240
},
"L": {
"width": 500,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_L",
"height": 400
},
"XXXS": {
"width": 50,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XXXS",
"height": 50
},
"S": {
"width": 150,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_S",
"height": 120
},
"XS": {
"width": 100,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_XS",
"height": 80
},
"orig": {
"width": 600,
"href": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_orig",
"height": 480
}
},
"links": {
"album": "http://api-fotki.yandex.ru/api/users/alekna/album/156444/",
"editMedia": "http://img-fotki.yandex.ru/get/5303/alekna.0/0_67efb_caf79f6c_orig",
"self": "http://api-fotki.yandex.ru/api/users/alekna/photo/425723/",
"alternate": "http://fotki.yandex.ru/users/alekna/view/425723/",
"edit": "http://api-fotki.yandex.ru/api/users/alekna/photo/425723/"
},
"title": "Задача",
"xxx": false,
"access": "public",
"disableComments": false,
"published": "2011-03-22T13:14:46Z",
"hideOriginal": false,
"author": "alekna",
"geo": {
"type": "Point",
"coordinates": "55.7040297333 37.6448710822"
},
"id": "urn:yandex:fotki:alekna:photo:425723"
}
Пример
Представление коллекции альбомов пользователя в формате Atom:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns:f="yandex:fotki">
<id>urn:yandex:fotki:alekna:albums</id>
<author>
<name>alekna</name>
</author>
<title>alekna на Яндекс.Фотках</title>
<updated>2011-04-27T11:55:30Z</updated>
<link href="http://api-fotki.yandex.ru/api/users/alekna/albums/" rel="self" />
<link href="http://fotki.yandex.ru/users/alekna/albums/" rel="alternate" />
<entry>
<id>urn:yandex:fotki:alekna:album:165988</id>
<author>
<name>alekna</name>
</author>
<title>Германия</title>
<summary>Наша школьная поездка</summary>
<link href="http://api-fotki.yandex.ru/api/users/alekna/album/165988/" rel="self" />
<link href="http://api-fotki.yandex.ru/api/users/alekna/album/165988/" rel="edit" />
<link href="http://api-fotki.yandex.ru/api/users/alekna/album/165988/photos/" rel="photos" />
<link href="http://api-fotki.yandex.ru/api/users/alekna/album/165988/photos.ymapsml/" rel="ymapsml" />
<link href="http://fotki.yandex.ru/users/alekna/album/165988/" rel="alternate" />
<published>2011-04-15T20:34:51Z</published>
<app:edited>2011-04-27T11:55:30Z</app:edited>
<updated>2011-04-27T11:55:30Z</updated>
<f:protected value="false" />
<f:image-count value="0" />
</entry>
<entry>
...
</entry>
...
</feed>
Представление коллекции альбомов пользователя в формате JSON:
{
"updated": "2011-04-27T11:55:30Z",
"links": {
"self": "http://api-fotki.yandex.ru/api/users/alekna/albums/",
"alternate": "http://fotki.yandex.ru/users/alekna/albums/"
},
"author": "alekna",
"title": "alekna на Яндекс.Фотках",
"entries": [
{
"edited": "2011-04-27T11:55:30Z",
"updated": "2011-04-27T11:55:30Z",
"links": {
"edit": "http://api-fotki.yandex.ru/api/users/alekna/album/165988/",
"photos": "http://api-fotki.yandex.ru/api/users/alekna/album/165988/photos/",
"self": "http://api-fotki.yandex.ru/api/users/alekna/album/165988/",
"alternate": "http://fotki.yandex.ru/users/alekna/album/165988/",
"ymapsml": "http://api-fotki.yandex.ru/api/users/alekna/album/165988/photos.ymapsml/"
},
"title": "ура",
"author": "alekna",
"summary": "Наша школьная поездка",
"published": "2011-04-15T20:34:51Z",
"id": "urn:yandex:fotki:alekna:album:165988",
"imageCount": 0
},
{
...
}
...
]
"id": "urn:yandex:fotki:alekna:albums"
}