Лучшие практики получения связанных данных в REST API - PullRequest
3 голосов
/ 18 сентября 2011

Итак, у меня есть REST API, в котором у меня есть ресурс, с которым связаны другие ресурсы (связанные модели, с точки зрения программирования).

Итак, как я сейчас это делаю, так это то, что всякий раз, когда я запрашиваю ресурс, ссылки на связанные ресурсы указываются через URL-адреса ('/related_data/related_data_id/').

Однако я беспокоюсь, чтоскажем, есть 5 связанных ресурсов с тем, который я получаю, это то, что я выполнил бы 5 запросов GET.Я пишу клиент для iPhone, и мне интересно, если это то, как правильно сделать это с помощью REST (что я возвращаю URL-адреса).Пример ответа JSON:

{
"meta": {
            "limit": 20, 
            "next": null, 
            "offset": 0, 
            "previous": null, 
            "total_count": 2
        }, 
"objects": [
    {
        "away_team": "/api/team/3/", 
        "country": "/api/country/1/", 
        "event_date": "2011-08-16", 
        "event_time": "06:00:00", 
        "event_timezone": "GMT", 
        "home_team": "/api/team/4/", 
        "id": "1", 
        "level": "/api/level/4/", 
        "resource_uri": "/api/event/1/", 
        "tournament": "/api/tournament/1/"
    }, 
    {
        "away_team": "/api/team/4/", 
        "country": "/api/country/1/", 
        "event_date": "2011-09-29", 
        "event_time": "12:00:00", 
        "event_timezone": "UTC", 
        "home_team": "/api/team/3/", 
        "id": "2", 
        "level": "/api/level/1/", 
        "resource_uri": "/api/event/2/", 
        "tournament": "/api/tournament/6/"
    }
]
}

Это правильный способ сделать это в REST, учитывая, что «каждый URI должен отображаться на ресурс» и все такое?

IЯ использую Django и Django-tastypie

Заранее спасибо!

1 Ответ

2 голосов
/ 19 сентября 2011

Да;это правильно, если связанные ресурсы обновляются независимо.Архитектуры REST зависят от производительности для кэширования и поэтому лучше всего работают с ресурсами, которые действуют как атомарные объекты (см. подробнее здесь ).Таким образом, вы можете обновить ресурс B и сделать его представление свежим, не обновляя ресурс A. См. этот комментарий SO для получения дополнительной информации о дизайне.

...