Kentico Cloud Swift SDK не возвращает товары - PullRequest
0 голосов
/ 28 июня 2019

Я тестирую Kentico Cloud Swift SDK, чтобы вернуть некоторые типы контента 'article' (я создал два из них, и они опубликованы).

Я использую код Boilerplate, как описано здесь:

Результат, который я получаю: [Kentico Cloud] Getting items action has succeeded. Received nil items.

Мой код:

let client = DeliveryClient.init(projectId: <project id>, previewApiKey: <preview key>, secureApiKey: <secure key>, enableDebugLogging: true)

func getArticles(){

    // Note: Using "items" as custom query returns all content items,
    // but to map them to a single model, a filter is needed.
    let customQuery = "items?system.type=article"

    // More about strongly-typed models https://github.com/Kentico/cloud-sdk-swift#using-strongly-typed-models
    client.getItems(modelType: Article.self, customQuery: customQuery) { (isSuccess, itemsResponse, error) in
        if isSuccess {

    // We get here and itemsResponse != nil but items == nil

            if let articles = itemsResponse?.items {
                for article in articles {


                }
            }
        } else {
            if let error = error {
                print(error)
            }
        }
    }
}

Я полагаю, что это сообщение об ошибке появится до ObjectMapperзапускается для преобразования JSON в объекты Article.Хотя я могу ошибаться.

У кого-нибудь есть идеи?

ОБНОВЛЕНИЕ Интересно, если бы я запросил один объект статьи, такой как ...

client.getItem(modelType: Article.self, itemName: <codename>) { (isSuccess, itemResponse, error) in
            if isSuccess {

                if let article = itemResponse?.item {
                    // Use your item here
                }
            } else {
                if let error = error {
                    print(error)
                }
            }
        }

...тогда это работает.Я получаю объект Article.Это просто просит все статьи, которые терпят неудачу.

Ответы [ 2 ]

3 голосов
/ 01 июля 2019

Я собираюсь исследовать проблему позже сегодня, однако, по вашему описанию, она может быть вызвана задержкой готовности элемента API доставки - проект еще не был полностью синхронизирован с API доставки.После публикации / отмены публикации элемента или создания / создания проекта может возникнуть небольшая задержка в обработке сообщений с помощью API доставки, что может привести к недоступности элемента.Эта задержка может быть переменной - по моему опыту, она может варьироваться от пары секунд до 2-3 минут.Тем не менее, я собираюсь проверить это, чтобы быть уверенным.Я буду держать вас в курсе.

Редактировать: Я почти уверен, что проект не был синхронизирован и обработан в API доставки на момент запроса элементов.API возвратил 200 , в результате чего isSuccess в обратном вызове было true , однако, возможно, не было ни одного или только подмножество доступных элементов - I 'Мы воспроизвели это поведение (снимок экрана ниже), хотя оно разработано специально (контент / сообщения в Event Hub должны обрабатываться асинхронно).

Я также предложил усовершенствование документации Kentico Cloud, чтобы упомянуть / объяснить возможную задержку, вызванную обработкой сообщений очереди событий из концентраторов событий .

debug items property

Просто чтобы быть уверенным - не могли бы вы повторить это с вашим getArticles пользовательским запросом?

Edit2: Назад к вашемувопрос по поводу ObjectMapper.Это не ошибка, а просто сообщение отладки, однако в сообщении отладки должно быть не nil, а 0 (ноль).Сообщение пришло от:

    private func sendGetItemsRequest<T>(url: String, completionHandler: @escaping (Bool, ItemsResponse<T>?, Error?) -> ()) where T: Mappable {
    sessionManager.request(url, headers: self.headers).responseObject { (response: DataResponse<ItemsResponse<T>>) in

        switch response.result {
        case .success:
            if let value = response.result.value {
                let deliveryItems = value
                if self.isDebugLoggingEnabled {
                    print("[Kentico Cloud] Getting items action has succeeded. Received \(String(describing: deliveryItems.items?.count)) items.")
                }
                completionHandler(true, deliveryItems, nil)
            }
        case .failure(let error):
            if self.isDebugLoggingEnabled {
                print("[Kentico Cloud] Getting items action has failed. Check requested URL: \(url)")
            }
            completionHandler(false, nil, error)
        }
    }
}
1 голос
/ 28 июня 2019

Хорошо.Это очень странно.После проверки API путем запроса отдельного элемента (см. Обновление в посте выше) и получения результата (woot).Теперь кажется, что оригинальный код (без изменений) теперь работает.

Интересно, потребуется ли какое-то время для распространения данных и их доступности в API?

Кто знает.Weird.

...