Интеграция RestKit и Tastypie

Я использую RestKit для доступа к Tastypie API. Я контролирую оба конца.

Я настроил сопоставление RestKit для успешной загрузки «голого» ресурса JSON в `/api/v1/organizations/1/ следующим образом:

{
"id": "1", 
"name": "ACME Space"
}

Но как мне настроить RestKit для загрузки ресурса в /api/v1/organizations/, который выглядит так:

{
"meta": 
    {
        "limit": 20, 
        "next": null, 
        "offset": 0, 
        "previous": null, 
        "total_count": 2
    }, 
"objects": 
    [
        {
            "id": "1", 
            "name": "ACME Space"
        },
        {
            "id": "2", 
            "name": "XYZ Tech"
        }
    ]
}

Я предполагаю, что RestKit не нравится ключ meta или ключ objects, используемые для объекта Organization.

Я пытаюсь сделать это с помощью RKFetchedResultsTableController. Есть ли обратный вызов делегата, который я могу переопределить, или класс, который я могу подклассировать, чтобы убрать лишний JSON, который не нравится RestKit? Возможно, проще изменить способ, которым Tastypie выдает ответ JSON?

Этот вопрос похож на этот SO-вопрос без ответа.


person Erik    schedule 26.09.2012    source источник


Ответы (2)


Я бы порекомендовал вам взглянуть на ветку feature/reboot-networking-layer, которая в настоящее время находится на поздних стадиях разработки. Одной из многих функций является гармонизация конфигураций сопоставления на основе ключевого пути и URL-адреса с использованием нового класса под названием RKResponseDescriptor. По сути, это позволяет вам сказать, что когда я загружаю объект по этому шаблону пути (в данном случае /api/v1/organizations), сопоставьте путь ключа «объекты», используя заданное сопоставление. Это решает предыдущие проблемы с неоднозначностью пути к ключу для общих путей к ключу, таких как «объекты».

В заголовках есть обширная документация (опубликована на http://restkit.org/api/0.20.0-dev/index.html) и новый файл README.md, опубликованный на https://github.com/RestKit/RestKit/tree/feature/reboot-networking-layer.

person Blake Watters    schedule 26.09.2012
comment
Я посмотрю эту ветку сегодня вечером, Блейк, звучит многообещающе. Мне бы очень хотелось исправить это несоответствие импеданса между RestKit и Tastypie на стороне RestKit, поскольку я не всегда могу контролировать API. Также - спасибо за ваш быстрый ответ. Всегда здорово, когда на вопросы отвечает разработчик фреймворка. - person Erik; 27.09.2012
comment
Одна только поддержка PATCH делает это достойным внимания! - person Erik; 27.09.2012
comment
У вас наверняка есть много замечательных функций, упакованных в 0.20. Выглядит здорово, но боюсь, что придется переписывать много кода — и для разрабатываемого релиза. Я уже начал новую ветку своего кода, но было бы неплохо найти временное решение для моей небольшой проблемы в вопросе, не переключаясь на 0.20. - person Erik; 27.09.2012

Разрабатываемая версия TastyPie имеет атрибут Meta.collection_name, который можно использовать для различения. См. документацию здесь.

С учетом этого я создал класс Meta и сопоставил его forKeyPath:@"meta", а RestKit разобрался с остальным. Я получаю списки объектов обратно с одним метаобъектом и N моих реальных объектов.

person tmitchell    schedule 06.11.2012