diff --git a/.env b/.env index 3542543e..579e26c2 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -CONTENTFUL_SDK_VERSION=0.10.2 +CONTENTFUL_SDK_VERSION=0.11.0 diff --git a/.envrc b/.envrc index 0883e7f0..28615ccd 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -export CONTENFUL_SDK_VERSION=0.10.2 +export CONTENFUL_SDK_VERSION=0.11.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index cec4375e..85447fdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ This project adheres to [Semantic Versioning](http://semver.org/) starting from ## Table of contents #### 0.x Releases +- `0.10.x` Releases - [0.11.0](#0110) - `0.10.x` Releases - [0.10.0](#0100) | [0.10.1](#0101) | [0.10.2](#0102) - `0.9.x` Releases - [0.9.0](#090) | [0.9.1](#091) | [0.9.2](#092) | [0.9.3](#093) - `0.8.x` Releases - [0.8.0](#080) @@ -22,12 +23,25 @@ This project adheres to [Semantic Versioning](http://semver.org/) starting from --- +## [`0.11.0`](https://github.com/contentful/contentful.swift/releases/tag/0.11.0) +Released on 2017-10-10 + +#### Changed +- **BREAKING:** `EntryModellable` is now called `EntryDecodable` and extends `Decodable` from the Swift 4 Foundation standard library. There are convenience methods for deserializing fields in the "fields" container for an entry. +- **BREAKING:** The `MappedContent` type no longer exists. If requesting heterogeneous collections (by hitting "/entries" with no query paramters for intance), you will get a `Result` and it is up to you to filter the array by the contained types. + +#### Fixed +- [#132](https://github.com/contentful/contentful.swift/issues/132) `EntryDecodable` not synthesizing arrays of links +- [#133](https://github.com/contentful/contentful.swift/issues/133) `EntryDecodable` not allowing properties that are implicit optionals + +--- + ## [`0.10.2`](https://github.com/contentful/contentful.swift/releases/tag/0.10.2) Released on 2017-10-06 #### Fixed - Compile error due to incorrect protection level setting -` + --- ## [`0.10.1`](https://github.com/contentful/contentful.swift/releases/tag/0.10.1) diff --git a/Config.xcconfig b/Config.xcconfig index 3542543e..579e26c2 100644 --- a/Config.xcconfig +++ b/Config.xcconfig @@ -1 +1 @@ -CONTENTFUL_SDK_VERSION=0.10.2 +CONTENTFUL_SDK_VERSION=0.11.0 diff --git a/Contentful.playground/Pages/Working with Entries.xcplaygroundpage/Contents.swift b/Contentful.playground/Pages/Working with Entries.xcplaygroundpage/Contents.swift index 28384f94..6db9f534 100644 --- a/Contentful.playground/Pages/Working with Entries.xcplaygroundpage/Contents.swift +++ b/Contentful.playground/Pages/Working with Entries.xcplaygroundpage/Contents.swift @@ -46,7 +46,7 @@ client.fetchEntries(with: query).next { catsArrayResponse in //: Each entry has a number of read-only system fields, like its creation date let creationDate = cat.sys.createdAt //: You also have access to its user-defined fields in a similar fashion - let name = cat.fields.string(at:"name") ?? "" + let name = cat.fields.string(at: "name") ?? "" let likes = cat.fields.strings(at: "likes")?.joined(separator: " and ") ?? "" let lives = cat.fields.int(at: "lives") ?? 0 @@ -56,7 +56,7 @@ client.fetchEntries(with: query).next { catsArrayResponse in //: The SDK will also resolve any included links automatically for you. guard let friend = cat.fields.linkedEntry(at: "bestFriend") else { return } - let friendsName = friend.fields.string(at:"name") ?? "" + let friendsName = friend.fields.string(at: "name") ?? "" let friendsLikes = friend.fields.strings(at: "likes")?.joined(separator: " and ") ?? "" print("\(name)'s friend is named: '\(friendsName)'") diff --git a/Contentful.xcodeproj/project.pbxproj b/Contentful.xcodeproj/project.pbxproj index 7e9546b4..1afce0c0 100644 --- a/Contentful.xcodeproj/project.pbxproj +++ b/Contentful.xcodeproj/project.pbxproj @@ -30,6 +30,9 @@ A1BF6BBC1C0D0FBD00049712 /* SignalUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1BF6BBB1C0D0FBD00049712 /* SignalUtils.swift */; }; ED02BC611E7047B900BAB2CA /* QueryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED02BC5F1E7047AE00BAB2CA /* QueryTests.swift */; }; ED0876DA1E1D07B3008E1A06 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED0876D91E1D07B3008E1A06 /* Date.swift */; }; + ED10F3FA1F8BD82200A00180 /* QueryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED10F3F81F8BD81F00A00180 /* QueryTests.json */; }; + ED10F3FB1F8BD82300A00180 /* QueryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED10F3F81F8BD81F00A00180 /* QueryTests.json */; }; + ED10F3FC1F8BD82300A00180 /* QueryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED10F3F81F8BD81F00A00180 /* QueryTests.json */; }; ED1638C51ED5CA6D009BAA9F /* ImageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1638C41ED5CA6D009BAA9F /* ImageTests.swift */; }; ED1D789A1F2F96260048E169 /* DataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1D78991F2F96260048E169 /* DataCache.swift */; }; ED1D789B1F2F96260048E169 /* DataCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1D78991F2F96260048E169 /* DataCache.swift */; }; @@ -110,9 +113,6 @@ ED68BD731E6DC47F00939F6D /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED68BD711E6DC47A00939F6D /* Query.swift */; }; ED68BD741E6DC48000939F6D /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED68BD711E6DC47A00939F6D /* Query.swift */; }; ED68BD751E6DC48000939F6D /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED68BD711E6DC47A00939F6D /* Query.swift */; }; - ED6EA90A1F44675F00FCA0F2 /* QueryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED6EA9081F44675C00FCA0F2 /* QueryTests.json */; }; - ED6EA90B1F44676000FCA0F2 /* QueryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED6EA9081F44675C00FCA0F2 /* QueryTests.json */; }; - ED6EA90C1F44676000FCA0F2 /* QueryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED6EA9081F44675C00FCA0F2 /* QueryTests.json */; }; ED737C6B1EF0095400ECB3F1 /* AssetTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED737C691EF0095200ECB3F1 /* AssetTests.json */; }; ED737C6E1EF0097000ECB3F1 /* ContentTypeTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED737C6C1EF0096D00ECB3F1 /* ContentTypeTests.json */; }; ED737C711EF0098C00ECB3F1 /* EntryTests.json in Resources */ = {isa = PBXBuildFile; fileRef = ED737C6F1EF0098A00ECB3F1 /* EntryTests.json */; }; @@ -193,6 +193,9 @@ EDBEC9511E3F548F0040FC56 /* Contentful.h in Headers */ = {isa = PBXBuildFile; fileRef = EDBEC9491E3F51FE0040FC56 /* Contentful.h */; settings = {ATTRIBUTES = (Public, ); }; }; EDBEC9521E3F548F0040FC56 /* Contentful.h in Headers */ = {isa = PBXBuildFile; fileRef = EDBEC9491E3F51FE0040FC56 /* Contentful.h */; settings = {ATTRIBUTES = (Public, ); }; }; EDBEC9531E3F54900040FC56 /* Contentful.h in Headers */ = {isa = PBXBuildFile; fileRef = EDBEC9491E3F51FE0040FC56 /* Contentful.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EDE83CBC1F8CEA8C00467CD6 /* LinkResolverTests.json in Resources */ = {isa = PBXBuildFile; fileRef = EDE83CBA1F8CEA8A00467CD6 /* LinkResolverTests.json */; }; + EDE83CBD1F8CEA8D00467CD6 /* LinkResolverTests.json in Resources */ = {isa = PBXBuildFile; fileRef = EDE83CBA1F8CEA8A00467CD6 /* LinkResolverTests.json */; }; + EDE83CBE1F8CEA8D00467CD6 /* LinkResolverTests.json in Resources */ = {isa = PBXBuildFile; fileRef = EDE83CBA1F8CEA8A00467CD6 /* LinkResolverTests.json */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -247,6 +250,7 @@ A1BF6BBB1C0D0FBD00049712 /* SignalUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = SignalUtils.swift; sourceTree = ""; }; ED02BC5F1E7047AE00BAB2CA /* QueryTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QueryTests.swift; sourceTree = ""; }; ED0876D91E1D07B3008E1A06 /* Date.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Date.swift; sourceTree = ""; }; + ED10F3F81F8BD81F00A00180 /* QueryTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = QueryTests.json; sourceTree = ""; }; ED1638C41ED5CA6D009BAA9F /* ImageTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageTests.swift; sourceTree = ""; }; ED1D78991F2F96260048E169 /* DataCache.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataCache.swift; sourceTree = ""; }; ED1D789E1F3069FF0048E169 /* Client+Modellable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Client+Modellable.swift"; sourceTree = ""; }; @@ -261,7 +265,6 @@ ED535E631F5E8E1300886D93 /* Decodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Decodable.swift; sourceTree = ""; }; ED65CF951E3F6BF8000EBC62 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = Carthage/Build/iOS/Nimble.framework; sourceTree = ""; }; ED68BD711E6DC47A00939F6D /* Query.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Query.swift; sourceTree = ""; }; - ED6EA9081F44675C00FCA0F2 /* QueryTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = QueryTests.json; sourceTree = ""; }; ED737C691EF0095200ECB3F1 /* AssetTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = AssetTests.json; sourceTree = ""; }; ED737C6C1EF0096D00ECB3F1 /* ContentTypeTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ContentTypeTests.json; sourceTree = ""; }; ED737C6F1EF0098A00ECB3F1 /* EntryTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = EntryTests.json; sourceTree = ""; }; @@ -294,6 +297,7 @@ EDDC070F1E3BCE920022F2F9 /* Contentful.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Contentful.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EDDC071C1E3BCEA40022F2F9 /* Contentful.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Contentful.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EDDC07291E3BCEB10022F2F9 /* Contentful.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Contentful.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EDE83CBA1F8CEA8A00467CD6 /* LinkResolverTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = LinkResolverTests.json; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -520,11 +524,12 @@ ED9102671E65AE880076FDBD /* DVRRecordings */ = { isa = PBXGroup; children = ( + ED10F3F81F8BD81F00A00180 /* QueryTests.json */, + EDE83CBA1F8CEA8A00467CD6 /* LinkResolverTests.json */, ED737C691EF0095200ECB3F1 /* AssetTests.json */, ED737C6C1EF0096D00ECB3F1 /* ContentTypeTests.json */, ED737C6F1EF0098A00ECB3F1 /* EntryTests.json */, ED737C721EF009A000ECB3F1 /* ImageTests.json */, - ED6EA9081F44675C00FCA0F2 /* QueryTests.json */, ED737C871EF15CC600ECB3F1 /* PreviewSyncTests.json */, ED737C7E1EF00A0600ECB3F1 /* RateLimitTests.json */, ED737C751EF009C400ECB3F1 /* testClientCanAccessPreviewAPI.json */, @@ -794,10 +799,11 @@ ED737C771EF009C700ECB3F1 /* testClientCanAccessPreviewAPI.json in Resources */, ED737C831EF00A2000ECB3F1 /* testFetchSpace.json in Resources */, ED737C6E1EF0097000ECB3F1 /* ContentTypeTests.json in Resources */, - ED6EA90C1F44676000FCA0F2 /* QueryTests.json in Resources */, + ED10F3FC1F8BD82300A00180 /* QueryTests.json in Resources */, ED737C6B1EF0095400ECB3F1 /* AssetTests.json in Resources */, ED737C741EF009A500ECB3F1 /* ImageTests.json in Resources */, A10FF9D81BBB3860001AA4E9 /* Data in Resources */, + EDE83CBC1F8CEA8C00467CD6 /* LinkResolverTests.json in Resources */, ED737C801EF00A0800ECB3F1 /* RateLimitTests.json in Resources */, ED737C7A1EF009DD00ECB3F1 /* testClientCantAccessPreviewAPIWithProductionToken.json in Resources */, ED737C921EF1748700ECB3F1 /* SyncTests.json in Resources */, @@ -813,10 +819,11 @@ EDA690B41F43188500581FC6 /* testFetchSpace.json in Resources */, EDA690B01F43188500581FC6 /* RateLimitTests.json in Resources */, EDA690B31F43188500581FC6 /* SyncTests.json in Resources */, - ED6EA90B1F44676000FCA0F2 /* QueryTests.json in Resources */, + ED10F3FB1F8BD82300A00180 /* QueryTests.json in Resources */, EDA690AB1F43188500581FC6 /* ContentTypeTests.json in Resources */, EDA690AA1F43188500581FC6 /* AssetTests.json in Resources */, EDA690AD1F43188500581FC6 /* ImageTests.json in Resources */, + EDE83CBD1F8CEA8D00467CD6 /* LinkResolverTests.json in Resources */, EDA690AF1F43188500581FC6 /* PreviewSyncTests.json in Resources */, EDA690B21F43188500581FC6 /* testClientCantAccessPreviewAPIWithProductionToken.json in Resources */, EDA690B11F43188500581FC6 /* testClientCanAccessPreviewAPI.json in Resources */, @@ -832,10 +839,11 @@ EDA690BF1F43188500581FC6 /* testFetchSpace.json in Resources */, EDA690BB1F43188500581FC6 /* RateLimitTests.json in Resources */, EDA690BE1F43188500581FC6 /* SyncTests.json in Resources */, - ED6EA90A1F44675F00FCA0F2 /* QueryTests.json in Resources */, + ED10F3FA1F8BD82200A00180 /* QueryTests.json in Resources */, EDA690B61F43188500581FC6 /* ContentTypeTests.json in Resources */, EDA690B51F43188500581FC6 /* AssetTests.json in Resources */, EDA690B81F43188500581FC6 /* ImageTests.json in Resources */, + EDE83CBE1F8CEA8D00467CD6 /* LinkResolverTests.json in Resources */, EDA690BA1F43188500581FC6 /* PreviewSyncTests.json in Resources */, EDA690BD1F43188500581FC6 /* testClientCantAccessPreviewAPIWithProductionToken.json in Resources */, EDA690BC1F43188500581FC6 /* testClientCanAccessPreviewAPI.json in Resources */, diff --git a/README.md b/README.md index 0de5a971..66687284 100644 --- a/README.md +++ b/README.md @@ -43,15 +43,15 @@ client.fetchEntry("nyancat") { (result: Result) in } ``` -## `EntryModellable` and `MappedContent` +## `EntryDecodable` -The `EntryModellable` protocols allows you to define types that will be mapped from `Entry`s of the various content types in your Contentful space. When using methods such as: +The `EntryDecodable` protocol allows you to define types that will be mapped from `Entry`s of the various content types in your Contentful space. When using methods such as: ```swift -func fetchMappedEntries(with query: Query) -> Observable> +func fetchMappedEntries(with query: Query) -> Observable>> ``` -the asynchronously returned result will be an instance of `MappedContent` which will contain a dictionary which maps content type identifiers to arrays of `EntryModellable` (types of your own definition) that have been fetched. Note that these features are in beta and the API is subject to change. +the asynchronously returned result will be an instance of `MappedArrayResponse` in which the generic type parameter is the class you've defined for your content type. If you are using a `Query` that does not restrict the response to contain entries of one content type, you will use methods that return `MixedMappedArrayResponse` instead of `MappedArrayResponse`. The `EntryDecodable` protocol extends the `Decodable` protocol in Swift 4's Foundation standard library. The SDK provides helper methods for resolving relationships between `EntryDecodable`s and also for grabbing values from the fields container in the JSON for each resource. ## Swift playground diff --git a/Sources/Contentful/ArrayResponse.swift b/Sources/Contentful/ArrayResponse.swift index 39cb0fd6..4103363f 100644 --- a/Sources/Contentful/ArrayResponse.swift +++ b/Sources/Contentful/ArrayResponse.swift @@ -8,10 +8,6 @@ private protocol Array { - associatedtype ItemType - - var items: [ItemType] { get } - var limit: UInt { get } var skip: UInt { get } @@ -19,13 +15,20 @@ private protocol Array { var total: UInt { get } } +private protocol HomogeneousArray: Array { + + associatedtype ItemType + + var items: [ItemType] { get } +} + /** A list of resources in Contentful This is the result type for any request of a collection of resources. See: -**/ -public struct ArrayResponse: Array where ItemType: Resource, ItemType: Decodable { + **/ +public struct ArrayResponse: HomogeneousArray where ItemType: Resource & Decodable { /// The resources which are part of the given array public let items: [ItemType] @@ -59,8 +62,8 @@ public struct ArrayResponse: Array where ItemType: Resource, ItemType: init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) - assets = try values.decodeIfPresent([Asset].self, forKey: CodingKeys.assets) - entries = try values.decodeIfPresent([Entry].self, forKey: CodingKeys.entries) + assets = try values.decodeIfPresent([Asset].self, forKey: .assets) + entries = try values.decodeIfPresent([Entry].self, forKey: .entries) } } } @@ -75,7 +78,7 @@ extension ArrayResponse: Decodable { total = try container.decode(UInt.self, forKey: .total) limit = try container.decode(UInt.self, forKey: .limit) - // Annoying workaround for type system not allowing cast of items to [Entry] + // Workaround for type system not allowing cast of items to [Entry] let entries: [Entry] = items.flatMap { $0 as? Entry } let allIncludedEntries = entries + (includedEntries ?? []) @@ -89,12 +92,13 @@ extension ArrayResponse: Decodable { case items, includes, skip, limit, total } } + /** - A list of Contentful entries that have been mapped to types conforming to `EntryModellable` + A list of Contentful entries that have been mapped to types conforming to `EntryDecodable` See: */ -public struct MappedArrayResponse: Array where ItemType: EntryModellable { +public struct MappedArrayResponse: HomogeneousArray where ItemType: EntryDecodable { /// The resources which are part of the given array public let items: [ItemType] @@ -107,4 +111,193 @@ public struct MappedArrayResponse: Array where ItemType: EntryModellab /// The total number of resources which matched the original request public let total: UInt + + internal let includes: MappedIncludes? + + internal var includedAssets: [Asset]? { + return includes?.assets + } + internal var includedEntries: [EntryDecodable]? { + return includes?.entries + } +} + +internal struct MappedIncludes: Decodable { + let assets: [Asset]? + let entries: [EntryDecodable]? + + private enum CodingKeys: String, CodingKey { + case assets = "Asset" + case entries = "Entry" + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + assets = try container.decodeIfPresent([Asset].self, forKey: CodingKeys.assets) + // Cache to enable link resolution. + if let assets = assets { + decoder.linkResolver.cache(assets: assets) + } + + // A copy as an array of dictionaries just to extract "sys.type" field. + guard let jsonItems = try container.decodeIfPresent(Swift.Array.self, forKey: .entries) as? [[String: Any]] else { + self.entries = nil + return + } + var entriesJSONContainer = try container.nestedUnkeyedContainer(forKey: .entries) + var entries: [EntryDecodable] = [] + let contentTypes = decoder.userInfo[DecoderContext.contentTypesContextKey] as! [ContentTypeId: EntryDecodable.Type] + + while entriesJSONContainer.isAtEnd == false { + let contentTypeInfo = try jsonItems.contentTypeInfo(at: entriesJSONContainer.currentIndex) + + // For includes, if the type of this entry isn't defined by the user, we skip serialization. + if let type = contentTypes[contentTypeInfo.id] { + let entryModellable = try type.popEntryDecodable(from: &entriesJSONContainer) + entries.append(entryModellable) + } + } + self.entries = entries + + // Cache to enable link resolution. + if let entries = self.entries { + decoder.linkResolver.cache(entryDecodables: entries) + } + } +} + +extension MappedArrayResponse: Decodable { + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + skip = try container.decode(UInt.self, forKey: .skip) + total = try container.decode(UInt.self, forKey: .total) + limit = try container.decode(UInt.self, forKey: .limit) + + // All items and includes. + includes = try container.decodeIfPresent(MappedIncludes.self, forKey: .includes) + + // A copy as an array of dictionaries just to extract "sys.type" field. + guard let jsonItems = try container.decode(Swift.Array.self, forKey: .items) as? [[String: Any]] else { + throw SDKError.unparseableJSON(data: nil, errorMessage: "SDK was unable to serialize returned resources") + } + var entriesJSONContainer = try container.nestedUnkeyedContainer(forKey: .items) + var entries: [EntryDecodable] = [] + let contentTypes = decoder.userInfo[DecoderContext.contentTypesContextKey] as! [ContentTypeId: EntryDecodable.Type] + + while entriesJSONContainer.isAtEnd == false { + let contentTypeInfo = try jsonItems.contentTypeInfo(at: entriesJSONContainer.currentIndex) + + // Throw an error in this case as if there is no matching content type for the current id, then + // we can't serialize any of the entries. The type must match ItemType as this is a homogenous array. + guard let entryDecodableType = contentTypes[contentTypeInfo.id], entryDecodableType == ItemType.self else { + let errorMessage = """ + A response for the QueryOn<\(ItemType.self)> did return successfully, but a serious error + occurred when decoding the array of \(ItemType.self). + """ + throw SDKError.unparseableJSON(data: nil, errorMessage: errorMessage) + } + let entryDecodable = try entryDecodableType.popEntryDecodable(from: &entriesJSONContainer) + entries.append(entryDecodable) + } + + // Workaround for type system not allowing cast of items to [ItemType]. + self.items = entries.flatMap { $0 as? ItemType } + + // Cache to enable link resolution. + decoder.linkResolver.cache(entryDecodables: self.items) + // Resolve links. + decoder.linkResolver.churnLinks() + } + + private enum CodingKeys: String, CodingKey { + case items, includes, skip, limit, total + } +} + +/** + A list of Contentful entries that have been mapped to types conforming to `EntryDecodable` instances. + A MixedMappedArrayResponse respresents a heterogeneous collection of EntryDecodables being returned, + for instance if hitting the base /entries endpoint with no additional query parameters. If there is no + user-defined type for a particular entry, that entry will not be serialized at all. It is up to you to + introspect the type of each element in the items array to handle the response data properly. + + See: + */ +public struct MixedMappedArrayResponse: Array { + + /// The resources which are part of the given array + public let items: [EntryDecodable] + + /// The maximum number of resources originally requested + public let limit: UInt + + /// The number of elements skipped when performing the request + public let skip: UInt + + /// The total number of resources which matched the original request + public let total: UInt + + internal let includes: MappedIncludes? + + internal var includedAssets: [Asset]? { + return includes?.assets + } + internal var includedEntries: [EntryDecodable]? { + return includes?.entries + } +} + +extension MixedMappedArrayResponse: Decodable { + + public init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + skip = try container.decode(UInt.self, forKey: .skip) + total = try container.decode(UInt.self, forKey: .total) + limit = try container.decode(UInt.self, forKey: .limit) + + // All items and includes. + includes = try container.decodeIfPresent(MappedIncludes.self, forKey: .includes) + + // A copy as an array of dictionaries just to extract "sys.type" field. + guard let jsonItems = try container.decode(Swift.Array.self, forKey: .items) as? [[String: Any]] else { + throw SDKError.unparseableJSON(data: nil, errorMessage: "SDK was unable to serialize returned resources") + } + var entriesJSONContainer = try container.nestedUnkeyedContainer(forKey: .items) + var entries: [EntryDecodable] = [] + let contentTypes = decoder.userInfo[DecoderContext.contentTypesContextKey] as! [ContentTypeId: EntryDecodable.Type] + + while entriesJSONContainer.isAtEnd == false { + let contentTypeInfo = try jsonItems.contentTypeInfo(at: entriesJSONContainer.currentIndex) + + // After implementing handling of the errors array, we can append an SDKError when the type isn't found. + if let entryDecodableType = contentTypes[contentTypeInfo.id] { + let entryDecodable = try entryDecodableType.popEntryDecodable(from: &entriesJSONContainer) + entries.append(entryDecodable) + } + } + self.items = entries + + // Cache to enable link resolution. + decoder.linkResolver.cache(entryDecodables: self.items) + // Resolve links. + decoder.linkResolver.churnLinks() + } + + private enum CodingKeys: String, CodingKey { + case items, includes, skip, limit, total + } +} + +// Convenience method for grabbing the content type information of a json item in an array of resources. +internal extension Swift.Array where Element == Dictionary { + + func contentTypeInfo(at index: Int) throws -> Link { + let errorMessage = "SDK was unable to parse sys.type property necessary to finish resource serialization." + guard let sys = self[index]["sys"] as? [String: Any], let contentTypeInfo = sys["contentType"] as? Link else { + throw SDKError.unparseableJSON(data: nil, errorMessage: errorMessage) + } + return contentTypeInfo + } } diff --git a/Sources/Contentful/Client+Modellable.swift b/Sources/Contentful/Client+Modellable.swift index 4f79173a..11f7dbe2 100644 --- a/Sources/Contentful/Client+Modellable.swift +++ b/Sources/Contentful/Client+Modellable.swift @@ -9,25 +9,6 @@ import Foundation import Interstellar -/** - A small container to hold intances of your own `EntryModellable` types to be returned when using - `Client` methods such as: - - ``` - func fetchMappedEntries(with query: Query, - then completion: @escaping ResultsHandler) -> URLSessionDataTask? - ``` - */ -public struct MappedContent { - - /// The `Asset` instances contained in the response. - public let assets: [Asset] - - /// A Dictionary mapping `EntryModellable.contentTypeId` identifiers to instances of your `EntryModellable` types. - public let entries: [ContentTypeId: [EntryModellable]] -} - - extension Client { /** Fetch a collection of Entries from Contentful matching the specified query. @@ -35,14 +16,14 @@ extension Client { - Parameter query: The Query object to match results againts. - Returns: An Observable for the resulting `MappedContent` container. */ - @discardableResult public func fetchMappedEntries(with query: Query) -> Observable> { - let asyncDataTask: AsyncDataTask = fetchMappedEntries(with:then:) + @discardableResult public func fetchMappedEntries(with query: Query) -> Observable> { + let asyncDataTask: AsyncDataTask = fetchMappedEntries(with:then:) return toObservable(parameter: query, asyncDataTask: asyncDataTask).observable } /** Fetches all entries and includes matching the passed in `Query`. The completion handler returned will return a `MappedContent` object which - contains an array of `Asset`s and a dictionary of ContentTypeId's to arrays of `EntryModellable` types of your own definition. + contains an array of `Asset`s and a dictionary of ContentTypeId's to arrays of `EntryDecodable` types of your own definition. - Parameter query: The Query object to match results against. - Parameter completion: A handler being called on completion of the request containing a `MappedContent` instance. @@ -51,24 +32,17 @@ extension Client { will return nil. */ @discardableResult public func fetchMappedEntries(with query: Query, - then completion: @escaping ResultsHandler) -> URLSessionDataTask? { - guard let contentModel = self.contentModel else { return nil } + then completion: @escaping ResultsHandler) -> URLSessionDataTask? { let url = URL(forComponent: "entries", parameters: query.parameters) - return fetch(url: url) { (result: Result>) in - let mappedResult: Result = result.flatMap { entriesArrayResponse in - let mappedContent = entriesArrayResponse.toMappedContent(for: contentModel) - return Result.success(mappedContent) - } - completion(mappedResult) - } + return fetch(url: url, then: completion) } /** Fetch a collection of Entries of a specified content type matching the query. The content_type - parameter is specified by passing in a generic parameter: a model class conforming to `EntryModellable`. + parameter is specified by passing in a generic parameter: a model class conforming to `EntryDecodable`. - - Parameter query: A QueryOn object to match results of the specified EntryModellable against. + - Parameter query: A QueryOn object to match results of the specified EntryDecodable against. - Parameter completion: A handler being called on completion of the request. - Returns: The data task being used, enables cancellation of requests. If there is no `contentModel` property set on the Client, this method @@ -78,26 +52,18 @@ extension Client { @discardableResult public func fetchMappedEntries(with query: QueryOn, then completion: @escaping ResultsHandler>) -> URLSessionDataTask? { - guard let contentModel = self.contentModel else { return nil } - let url = URL(forComponent: "entries", parameters: query.parameters) - return fetch(url: url) { (result: Result>) in - - let transformedResult: Result> = result.flatMap { entriesArrayResponse in - return Result.success(entriesArrayResponse.toMappedArrayResponse(for: contentModel)) - } - completion(transformedResult) - } + return fetch(url: url, then: completion) } /** Fetch a collection of Entries of a specified content type matching the query. The content_type - parameter is specified by passing in a generic parameter: a model class conforming to `EntryModellable`. + parameter is specified by passing in a generic parameter: a model class conforming to `EntryDecodable`. - - Parameter query: A QueryOn object to match results of the specified EntryModellable against. + - Parameter query: A QueryOn object to match results of the specified EntryDecodable against. - - Returns: A tuple of data task and an observable for the resulting array of EntryModellable types. + - Returns: A tuple of data task and an observable for the resulting array of EntryDecodable types. */ @discardableResult public func fetchMappedEntries(with query: QueryOn) -> Observable>> { diff --git a/Sources/Contentful/Client.swift b/Sources/Contentful/Client.swift index f85fd5f9..e6ed4e30 100644 --- a/Sources/Contentful/Client.swift +++ b/Sources/Contentful/Client.swift @@ -33,6 +33,8 @@ open class Client { return clientConfiguration.server } + public var jsonDecoder: JSONDecoder + /** The persistence integration which will receive delegate messages from the `Client` when new `Entry` and `Asset` objects are created from data being sent over the network. Currently, these @@ -56,8 +58,6 @@ open class Client { internal var urlSession: URLSession - internal let contentModel: ContentModel? - fileprivate(set) var space: Space? fileprivate var scheme: String { return clientConfiguration.secure ? "https": "http" } @@ -81,11 +81,20 @@ open class Client { clientConfiguration: ClientConfiguration = .default, sessionConfiguration: URLSessionConfiguration = .default, persistenceIntegration: PersistenceIntegration? = nil, - contentModel: ContentModel? = nil) { + contentTypeClasses: [EntryDecodable.Type]? = nil) { self.spaceId = spaceId self.clientConfiguration = clientConfiguration - self.contentModel = contentModel + + self.jsonDecoder = Client.jsonDecoderWithoutLocalizationContext + if let contentTypeClasses = contentTypeClasses { + var contentTypes = [ContentTypeId: EntryDecodable.Type]() + for type in contentTypeClasses { + contentTypes[type.contentTypeId] = type + } + jsonDecoder.userInfo[DecoderContext.contentTypesContextKey] = contentTypes + jsonDecoder.userInfo[DecoderContext.linkResolverContextKey] = LinkResolver() + } self.persistenceIntegration = persistenceIntegration self.dataDelegate = clientConfiguration.dataDelegate @@ -225,11 +234,8 @@ open class Client { } fileprivate func handleRateLimitJSON(_ data: Data, timeUntilLimitReset: Int, _ completion: ResultsHandler) { - - let jsonDecoder = JSONDecoder() - guard let rateLimitError = try? jsonDecoder.decode(RateLimitError.self, from: data) else { - completion(.error(SDKError.unparseableJSON(data: data, errorMessage: "SDK unable to parse RateLimitError payload"))) + completion(Result.error(SDKError.unparseableJSON(data: data, errorMessage: "SDK unable to parse RateLimitError payload"))) return } rateLimitError.timeBeforeLimitReset = timeUntilLimitReset @@ -240,9 +246,6 @@ open class Client { fileprivate func handleJSON(_ data: Data, _ completion: ResultsHandler) { do { - let jsonDecoder = Client.jsonDecoderWithoutLocalizationContext - Client.update(jsonDecoder, withLocalizationContextFrom: space) - // Use failable initialzer to optional rather than initializer that throws, // because failure to find an error in the JSON should error should not throw an error that JSON is not parseable. if let apiError = ContentfulError.error(with: jsonDecoder, and: data) { @@ -250,7 +253,6 @@ open class Client { return } - // Locales will be injected via the JSONDecoder's userInfo property. let decodedObject = try jsonDecoder.decode(DecodableType.self, from: data) completion(Result.success(decodedObject)) } catch { @@ -279,6 +281,11 @@ extension Client { } return fetch(url: self.URL()) { (result: Result) in self.space = result.value + + // Inject locale information to JSONDecoder. + Client.update(self.jsonDecoder, withLocalizationContextFrom: self.space) + + // Inject locale information to let localeCodes = self.space?.locales.map { $0.code } ?? [] self.persistenceIntegration?.update(localeCodes: localeCodes) completion(result) diff --git a/Sources/Contentful/ContentModellable.swift b/Sources/Contentful/ContentModellable.swift index 5d793c49..5b473531 100644 --- a/Sources/Contentful/ContentModellable.swift +++ b/Sources/Contentful/ContentModellable.swift @@ -11,262 +11,13 @@ import Foundation public typealias ContentTypeId = String /** - Classes conforming to this protocol can be passed into your ContentModel to leverage the type system - to return instances of your own model classes when using methods such as: - - ``` - func fetchMappedEntries(with query: Query, - then completion: @escaping ResultsHandler) -> URLSessionDataTask? - ``` + Implement this protocol in conjunction with the Resource protocol to enable deserialization to + types of your own definition. See `EntryDecodable` for more info. */ -public protocol EntryModellable: class { +public protocol EntryModellable: class, Decodable { /// The identifier of the Contentful content type that will map to this type of `EntryPersistable` static var contentTypeId: ContentTypeId { get } - - /// The unique identifier of the Entry. - var id: String { get } - - /// The code which represents which locale the Resource of interest contains data for. - var localeCode: String { get } - - /// EntryModellable classes must implement this initializer, which should assign the identifier and localeCode - /// and additionally map all fields that represent regular (non-relationship) fields to properties on the class. - init(entry: Entry) - - /// Implement this method to complete the object graph on your model. The `cache` dictionary will contain already - /// deserialized `EntryModellable`s of your own definition for fields which represent relationships on your model. - func populateLinks(from cache: [FieldName: Any]) -} - -/** - The ContentModel class contains the model of your application as it corresponds to your Content Model in Contentful. - Contentful's polymorphic JSON API returns all content types as `Entry` instances with properties in the `fields` dictionary - dependent on the identifier of the Content Type. However, switching on the content type of the `Entry` and then parsing the fields - can sometimes be cumbersome. By initializing your `Client` instance with a `ContentModel` which holds references to all the model - classes you have defined to be mapped from Contentful `Entry`s, you can utilize the relevant methods on `Client` to get back your own types. - */ -public class ContentModel { - - /// An array of model class types defined in your application which will be returned when using the relevant fetch methods on `Client`. - public let entryTypes: [EntryModellable.Type] - - /** - Initializes a new `ContentModel` instance. - - - Parameter entryTypes: References to the the types of your own definition, conforming to `EntryModellable`, which - which will be returned when using the relevant fetch methods on `Client`. - */ - public init(entryTypes: [EntryModellable.Type]) { - self.entryTypes = entryTypes - self.dataCache = DataCache() - self.cachedRelationshipNames = [ContentTypeId: [String]]() - } - - - internal let dataCache: DataCache - - // Small caches for optimizing mapping. - internal var cachedRelationshipNames: [ContentTypeId: [String]] - - // Dictionary mapping source Entry id's concatenated with locale code to a dictionary with fieldName to related entry id's. - internal var relationshipsToResolve = [String: [FieldName: Any]]() - - // See if you can get the types of the class. - internal func relationshipNames(for entryType: EntryModellable.Type, use entry: Entry) -> [String] { - if let cachedRelationshipNames = cachedRelationshipNames[entryType.contentTypeId] { - return cachedRelationshipNames - } - - // Create an empty instance of the current type so that we can introspect it's properties - // using Swift's mirror API. - let emptyInstance = entryType.init(entry: entry) - let mirror = Mirror(reflecting: emptyInstance) - - let relationshipNames: [String] = mirror.children.flatMap { propertyName, value in - let type = Swift.type(of: value) - - // Filter out relationship names. - if type is EntryModellable.Type || type is Asset.Type { - return propertyName - } else if let optionalType = type as? OptionalProtocol.Type, - optionalType.wrappedType() is EntryModellable.Type || optionalType.wrappedType() is Asset.Type { - return propertyName - } - return nil - } - - cachedRelationshipNames[entryType.contentTypeId] = relationshipNames - return relationshipNames - } - - // MARK: Relationships. - - // A type used to cache relationships that should be deleted in the `resolveRelationships()` method. - fileprivate struct DeletedRelationship {} - - // Returns a dictionary representing the fields names and the target id(s) to create links to. - fileprivate func cachableRelationships(for entryPersistable: EntryModellable, - of type: EntryModellable.Type, - with entry: Entry) -> [FieldName: Any] { - - // FieldName to either a single entry id or an array of entry id's to be linked. - var relationships = [FieldName: Any]() - - let relationshipFieldNames = relationshipNames(for: type, use: entry) - - // Get fieldNames which are links/relationships/references to other types. - for relationshipName in relationshipFieldNames { - - // Get the name of the property to be linked to. - if let linkedValue = entry.fields[relationshipName] { - if let targets = linkedValue as? [Link] { - // One-to-many. - relationships[relationshipName] = targets.map { ContentModel.cacheKey(for: $0, with: entry.currentlySelectedLocale.code) } - } else { - // One-to-one. - assert(linkedValue is Link) - relationships[relationshipName] = ContentModel.cacheKey(for: (linkedValue as! Link), with: entry.currentlySelectedLocale.code) - } - } else if entry.fields[relationshipName] == nil { - relationships[relationshipName] = DeletedRelationship() - } - } - - return relationships - } - - fileprivate func resolveRelationships() { - - for (entryId, fields) in relationshipsToResolve { - - if let entryModellable = dataCache.entry(for: entryId) { - - let relationshipTuples: [(FieldName, Any)] = fields.flatMap { (fieldName, targetId) in - - var transformedTarget: Any? = nil - if let identifier = targetId as? String { - transformedTarget = dataCache.item(for: identifier) - } - - if let identifiers = targetId as? [String] { - transformedTarget = identifiers.flatMap { id in - return dataCache.item(for: id) - } - } - - guard let unwrappedTarget = transformedTarget else { return nil } - return (fieldName, unwrappedTarget) - } - - let relationships = Dictionary(elements: relationshipTuples) - - entryModellable.populateLinks(from: relationships) - } - } - relationshipsToResolve.removeAll() - } - - internal static func cacheKey(for link: Link, with sourceLocaleCode: LocaleCode) -> String { - let linkType: String - switch link { - case .asset: - linkType = "asset" - case .entry: - linkType = "entry" - default: - fatalError() - } - let id = link.id - let delimeter = "_" - return id + delimeter + linkType + delimeter + sourceLocaleCode - } -} - -internal extension ArrayResponse where ItemType: Entry { - - internal func map(entries: [Entry], - to entryType: EntryModellable.Type, - using contentModel: ContentModel) -> [EntryModellable] { - - let mappedEntriesForContentType: [EntryModellable] = entries.flatMap { entry in - - let entryModellable: EntryModellable = entryType.init(entry: entry) - - // Cache relationships to be resolved later. - let entryKey = DataCache.cacheKey(for: entry) - contentModel.relationshipsToResolve[entryKey] = contentModel.cachableRelationships(for: entryModellable, of: entryType, with: entry) - - return entryModellable - } - return mappedEntriesForContentType - } - - internal func toMappedArrayResponse(for contentModel: ContentModel) -> MappedArrayResponse - where EntryType: EntryModellable { - - let mappedContent = self.toMappedContent(for: contentModel) - - let mappedItems = (mappedContent.entries[EntryType.contentTypeId] as! [EntryType]).filter { entryModellable in - // Only forward the "items" member of the original JSON. - return items.flatMap({ $0.id }).contains(entryModellable.id) - } - - return MappedArrayResponse(items: mappedItems, limit: limit, skip: skip, total: total) - } - - internal func toMappedContent(for contentModel: ContentModel) -> MappedContent { - - // Annoying workaround for type system not allowing cast of items to [Entry] - let entries: [Entry] = items.flatMap { $0 as Entry } - - let allEntries = entries + (includedEntries ?? []) - - var mappedEntriesDictionary = [ContentTypeId: [EntryModellable]]() - - for entryType in contentModel.entryTypes { // iterate over all types in the content model. - - let entriesForContentType = allEntries.filter { $0.sys.contentTypeId == entryType.contentTypeId } - - let mappedEntriesForContentType = map(entries: entriesForContentType, to: entryType, using: contentModel) - - // Map to user-defined types. - mappedEntriesDictionary[entryType.contentTypeId] = mappedEntriesForContentType - - // Cache the mapped entry so links may be resolved later. - mappedEntriesForContentType.forEach { entryModellable in - contentModel.dataCache.add(entry: entryModellable) - } - } - - // Assets - let allAssets = includedAssets ?? [] - for asset in allAssets { - // Cache the asset so links may be resolved later. - contentModel.dataCache.add(asset: asset) - } - - // Resolve relationships. - contentModel.resolveRelationships() - - let mappedContent = MappedContent(assets: allAssets, entries: mappedEntriesDictionary) - - return mappedContent - } -} - - -// MARK: Utilities - -internal extension Dictionary { - - // Helper initializer to allow declarative style Dictionary initialization using an array of tuples. - init(elements: [(Key, Value)]) { - self.init() - for (key, value) in elements { - updateValue(value, forKey: key) - } - } } // Convenience protocol and accompanying extension for extracting the type of data wrapped in an Optional. diff --git a/Sources/Contentful/DataCache.swift b/Sources/Contentful/DataCache.swift index 45be49bb..8ffc0d5c 100644 --- a/Sources/Contentful/DataCache.swift +++ b/Sources/Contentful/DataCache.swift @@ -8,52 +8,58 @@ import Foundation - -/// Implemented using `NSCache` internal class DataCache { static let cacheKeyDelimiter = "_" - internal static func cacheKey(for resource: EntryModellable) -> String { + internal static func cacheKey(for resource: Resource) -> String { let delimeter = DataCache.cacheKeyDelimiter - let cacheKey = resource.id + delimeter + "entry" + delimeter + resource.localeCode + let cacheKey = resource.sys.id + delimeter + resource.sys.type.lowercased() + delimeter + resource.sys.locale! return cacheKey } - internal static func cacheKey(for resource: LocalizableResource) -> String { - let delimeter = DataCache.cacheKeyDelimiter - // Look at the type info. - let cacheKey = resource.id + delimeter + resource.sys.type.lowercased() + delimeter + resource.currentlySelectedLocale.code - return cacheKey + internal static func cacheKey(for link: Link, with sourceLocaleCode: LocaleCode) -> String { + let linkType: String + switch link { + case .asset: + linkType = "asset" + case .entry: + linkType = "entry" + case .unresolved(let sys): + linkType = sys.linkType.lowercased() + } + let id = link.id + let delimeter = "_" + return id + delimeter + linkType + delimeter + sourceLocaleCode } - let assetCache = NSCache() - let entryCache = NSCache() + var assetCache = Dictionary() + var entryCache = Dictionary() internal func add(asset: Asset) { - assetCache.setObject(asset, forKey: DataCache.cacheKey(for: asset) as AnyObject) + assetCache[DataCache.cacheKey(for: asset)] = asset } - internal func add(entry: EntryModellable) { - entryCache.setObject(entry, forKey: DataCache.cacheKey(for: entry) as AnyObject) + internal func add(entry: EntryDecodable) { + entryCache[DataCache.cacheKey(for: entry)] = entry } internal func asset(for identifier: String) -> Asset? { - return assetCache.object(forKey: identifier as AnyObject) as? Asset + return assetCache[identifier] } - internal func entry(for identifier: String) -> EntryModellable? { - return entryCache.object(forKey: identifier as AnyObject) as? EntryModellable + internal func entry(for identifier: String) -> EntryDecodable? { + return entryCache[identifier] as? EntryDecodable } internal func item(for identifier: String) -> T? { return item(for: identifier) as? T } - internal func item(for identifier: String) -> AnyObject? { - var target: AnyObject? = self.asset(for: identifier) + internal func item(for identifier: String) -> Any? { + var target: Any? = self.asset(for: identifier) if target == nil { target = self.entry(for: identifier) diff --git a/Sources/Contentful/Decodable.swift b/Sources/Contentful/Decodable.swift index 4aa70d08..0d6644c4 100644 --- a/Sources/Contentful/Decodable.swift +++ b/Sources/Contentful/Decodable.swift @@ -8,19 +8,174 @@ import Foundation -public extension Client { +/** + Classes conforming to this protocol can be passed into your Client instance so that fetch methods + asynchronously returning MappedArrayResponse can be used and classes of your own definition can be returned. - public static var jsonDecoderWithoutLocalizationContext: JSONDecoder = { + It's important to note that there is no special handling of locales so if using the locale=* query parameter, + you will need to implement the special handing in your `init(from decoder: Decoder) throws` initializer for your class. + + Example: + + ``` + func fetchMappedEntries(with query: Query, + then completion: @escaping ResultsHandler>) -> URLSessionDataTask? + ``` + */ +public typealias EntryDecodable = Resource & EntryModellable + +/// Helper methods for decoding instances of the various types in your content model. +public extension Decoder { + + // The LinkResolver used by the SDK to cache and resolve links. + internal var linkResolver: LinkResolver { + return userInfo[DecoderContext.linkResolverContextKey] as! LinkResolver + } + + /// Helper method to extract the sys property of a Contentful resource. + public func sys() throws -> Sys { + let container = try self.container(keyedBy: LocalizableResource.CodingKeys.self) + let sys = try container.decode(Sys.self, forKey: .sys) + return sys + } + + /// Extract the nested JSON container for the "fields" dictionary present in Entry and Asset resources. + public func contentfulFieldsContainer(keyedBy keyType: NestedKey.Type) throws -> KeyedDecodingContainer { + let container = try self.container(keyedBy: LocalizableResource.CodingKeys.self) + let fieldsContainer = try container.nestedContainer(keyedBy: keyType, forKey: .fields) + return fieldsContainer + } +} + +internal extension EntryModellable where Self: EntryDecodable { + // This is a magic workaround for the fact that dynamic metatypes cannot be passed into + // initializers such as UnkeyedDecodingContainer.decode(Decodable.Type), yet static methods CAN + // be called on metatypes. + static func popEntryDecodable(from container: inout UnkeyedDecodingContainer) throws -> Self { + let entryDecodable = try container.decode(self) + return entryDecodable + } +} + +internal struct DecoderContext { + static let linkResolverContextKey = CodingUserInfoKey(rawValue: "linkResolverContext")! + static let contentTypesContextKey = CodingUserInfoKey(rawValue: "contentTypesContext")! + static let localizationContextKey = CodingUserInfoKey(rawValue: "localizationContext")! +} + +internal extension Client { + + // Returns the JSONDecoder owned by the Client. Until the first request to the CDA is made, this + // decoder won't have the necessary localization content required to + internal static var jsonDecoderWithoutLocalizationContext: JSONDecoder = { let jsonDecoder = JSONDecoder() jsonDecoder.dateDecodingStrategy = .formatted(Date.Formatter.iso8601) return jsonDecoder }() - public static func update(_ jsonDecoder: JSONDecoder, withLocalizationContextFrom space: Space?) { - jsonDecoder.userInfo[LocalizableResource.localizationContextKey] = space?.localizationContext + internal static func update(_ jsonDecoder: JSONDecoder, withLocalizationContextFrom space: Space?) { + jsonDecoder.userInfo[DecoderContext.localizationContextKey] = space?.localizationContext } } +// Fields JSON container. +public extension KeyedDecodingContainer { + + /** + Caches a link to be resolved once all resources in the response have been serialized. + + - Parameter key: The KeyedDecodingContainer.Key representing the JSON key were the related resource is found + - Parameter localeCode: The locale of the link source to be used when caching the relationship for future resolving + - Parameter decoder: The Decoder being used to deserialize the JSON to a user-defined class + - Parameter callback: The callback used to assign the linked item at a later time. + - Throws: Forwards the error if no link object is in the JSON at the specified key. + */ + public func resolveLink(forKey key: KeyedDecodingContainer.Key, + inLocale localeCode: LocaleCode, + decoder: Decoder, + callback: @escaping (Any) -> Void) throws { + + let linkResolver = decoder.linkResolver + if let link = try decodeIfPresent(Link.self, forKey: key) { + linkResolver.resolve(link, inLocale: localeCode, callback: callback) + } + } + + /** + Caches an array of linked entries to be resolved once all resources in the response have been serialized. + + - Parameter key: The KeyedDecodingContainer.Key representing the JSON key were the related resources arem found + - Parameter localeCode: The locale of the link source to be used when caching the relationship for future resolving + - Parameter decoder: The Decoder being used to deserialize the JSON to a user-defined class + - Parameter callback: The callback used to assign the linked item at a later time. + - Throws: Forwards the error if no link object is in the JSON at the specified key. + */ + public func resolveLinksArray(forKey key: KeyedDecodingContainer.Key, + inLocale localeCode: LocaleCode, + decoder: Decoder, + callback: @escaping (Any) -> Void) throws { + + let linkResolver = decoder.linkResolver + if let links = try decodeIfPresent(Array.self, forKey: key) { + linkResolver.resolve(links, inLocale: localeCode, callback: callback) + } + } +} + +internal class LinkResolver { + + private var dataCache: DataCache = DataCache() + + private var callbacks: [String: (Any) -> Void] = [:] + + private static let linksArrayPrefix = "linksArrayPrefix" + + internal func cache(assets: [Asset]) { + for asset in assets { + dataCache.add(asset: asset) + } + } + + internal func cache(entryDecodables: [EntryDecodable]) { + for entryDecodable in entryDecodables { + dataCache.add(entry: entryDecodable) + } + } + + // Caches the callback to resolve the relationship represented by a Link at a later time. + internal func resolve(_ link: Link, inLocale localeCode: LocaleCode, callback: @escaping (Any) -> Void) { + callbacks[DataCache.cacheKey(for: link, with: localeCode)] = callback + } + + internal func resolve(_ links: [Link], inLocale localeCode: LocaleCode, callback: @escaping (Any) -> Void) { + let linksIdentifier: String = links.reduce(into: LinkResolver.linksArrayPrefix) { (id, link) in + id += "," + DataCache.cacheKey(for: link, with: localeCode) + } + callbacks[linksIdentifier] = callback + } + + // Executes all cached callbacks to resolve links and then clears the callback cache and the data cache + // where resources are cached before being resolved. + internal func churnLinks() { + for (linkKey, callback) in callbacks { + if linkKey.hasPrefix(LinkResolver.linksArrayPrefix) { + let firstKeyIndex = linkKey.index(linkKey.startIndex, offsetBy: LinkResolver.linksArrayPrefix.count) + let onlyKeysString = linkKey[firstKeyIndex ..< linkKey.endIndex] + // Split creates a [Substring] array, but we need [String] to index the cache + let keys = onlyKeysString.split(separator: ",").map { String($0) } + let items: [Any] = keys.map { dataCache.item(for: $0) as Any } + callback(items as Any) + } else { + let item = dataCache.item(for: linkKey) + callback(item as Any) + } + } + self.callbacks = [:] + self.dataCache = DataCache() + } +} + + // Inspired by https://gist.github.com/mbuchetics/c9bc6c22033014aa0c550d3b4324411a internal struct JSONCodingKeys: CodingKey { internal var stringValue: String @@ -84,7 +239,7 @@ internal extension KeyedDecodingContainer { } else if let location = try? decode(Location.self, forKey: key) { dictionary[key.stringValue] = location } - + // These must be called after attempting to decode all other custom types. else if let nestedDictionary = try? decode(Dictionary.self, forKey: key) { dictionary[key.stringValue] = nestedDictionary diff --git a/Sources/Contentful/Link.swift b/Sources/Contentful/Link.swift index 8b23f1c0..35159022 100644 --- a/Sources/Contentful/Link.swift +++ b/Sources/Contentful/Link.swift @@ -11,8 +11,7 @@ import Foundation /** A representation of Linked Resources that a field may point to in your content model. This stateful type safely highlights links that have been resolved to Entries, Assets, or if they are - still unresolved. If your data model conforms to `EntryModellable` you can also use the `at` method - to extract an instance of your linked type. + still unresolved. */ public enum Link: Decodable { @@ -63,24 +62,6 @@ public enum Link: Decodable { } } - public static func link(from fieldValue: Any) -> Link? { - if let link = fieldValue as? Link { - return link - } - - // Linked objects are stored as a dictionary with "type": "Link", - // value for "linkType" can be "Asset", "Entry", "Space", "ContentType". - if let linkJSON = fieldValue as? [String: Any], - let sys = linkJSON["sys"] as? [String: Any], - let id = sys["id"] as? String, - let linkType = sys["linkType"] as? String, - let type = sys["type"] as? String { - return Link.unresolved(Link.Sys(id: id, linkType: linkType, type: type)) - } - - return nil - } - public var sys: Link.Sys { switch self { case .unresolved(let sys): diff --git a/Sources/Contentful/Query.swift b/Sources/Contentful/Query.swift index b813dca4..8539f39a 100644 --- a/Sources/Contentful/Query.swift +++ b/Sources/Contentful/Query.swift @@ -768,10 +768,10 @@ public final class AssetQuery: Query { /** An additional query to filter by the properties of linked objects when searching on references. See: - and see the init(whereLinkAt fieldNameForLink: String, matches filterQuery: FilterQuery? = nil) methods + and see the init(whereLinkAt fieldNameForLink: String, matches filterQuery: FilterQuery? = nil) methods on QueryOn for example usage. */ -public final class FilterQuery: AbstractQuery where EntryType: EntryModellable { +public final class FilterQuery: AbstractQuery where EntryType: EntryDecodable { /// The parameters dictionary that are converted to `URLComponents` (HTTP parameters/arguments) on the HTTP URL. Useful for debugging. public var parameters: [String: String] = [String: String]() @@ -818,7 +818,7 @@ public final class FilterQuery: AbstractQuery where EntryType: EntryM Operations that are only available when querying `Entry`s on specific content types (i.e. content_type must be set) are available through this class. */ -public final class QueryOn: ChainableQuery where EntryType: EntryModellable { +public final class QueryOn: ChainableQuery where EntryType: EntryDecodable { /// The parameters dictionary that are converted to `URLComponents` (HTTP parameters/arguments) on the HTTP URL. Useful for debugging. public var parameters: [String: String] = [String: String]() diff --git a/Sources/Contentful/Resource.swift b/Sources/Contentful/Resource.swift index 519673ea..89a7ea4e 100644 --- a/Sources/Contentful/Resource.swift +++ b/Sources/Contentful/Resource.swift @@ -20,9 +20,13 @@ extension Resource { public var id: String { return sys.id } + + public var localeCode: String? { + return sys.locale + } } -class DeletedResource: Resource, Decodable { +internal class DeletedResource: Resource, Decodable { let sys: Sys @@ -75,14 +79,13 @@ public class LocalizableResource: Resource, Decodable { // Context used for handling locales during decoding of `Asset` and `Entry` instances. internal let localizationContext: LocalizationContext - public static let localizationContextKey = CodingUserInfoKey(rawValue: "localizationContext")! public required init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) let sys = try container.decode(Sys.self, forKey: .sys) - guard let localizationContext = decoder.userInfo[LocalizableResource.localizationContextKey] as? LocalizationContext else { + guard let localizationContext = decoder.userInfo[DecoderContext.localizationContextKey] as? LocalizationContext else { throw SDKError.localeHandlingError(message: """ SDK failed to find the necessary LocalizationContext necessary to properly map API responses to internal format. @@ -105,7 +108,7 @@ public class LocalizableResource: Resource, Decodable { wasSelectedOnAPILevel: sys.locale != nil) } - private enum CodingKeys: String, CodingKey { + public enum CodingKeys: String, CodingKey { case sys case fields } @@ -205,28 +208,6 @@ public extension Dictionary where Key: ExpressibleByStringLiteral { return assets } - /** - Extract the linked value of type `T` at the specified fieldName. - - - Parameter key: The name of the field to extract the `T` from. - - Returns: The `T` value, or `nil` if data contained does not have contain a Link referencing an `T`. - */ - public func linkedValue(at key: Key) -> T? where T: EntryModellable { - let value = self[key] as? T - return value - } - - /** - Extract the linked array of type `[T]` at the specified fieldName. - - - Parameter key: The name of the field to extract the `[T]` from. - - Returns: The `[T]` value, or `nil` if data contained does not have contain a Link referencing an `[T]`. - */ - public func linkedValues(at key: Key) -> [T]? where T: EntryModellable { - let value = self[key] as? [T] - return value - } - /** Extract the `CLLocationCoordinate2D` at the specified fieldName. diff --git a/Sources/Contentful/Sys.swift b/Sources/Contentful/Sys.swift index 58951606..f2e692e4 100644 --- a/Sources/Contentful/Sys.swift +++ b/Sources/Contentful/Sys.swift @@ -33,7 +33,7 @@ public struct Sys { /// The number denoting what published version of the resource is. public let revision: Int? - // Because we have a root key of "sys" we will use a dictionary. + // The link describing the content type. fileprivate let contentTypeInfo: Link? // Not present on `Asset` or `ContentType` } @@ -48,11 +48,10 @@ extension Sys: Decodable { updatedAt = try container.decodeIfPresent(Date.self, forKey: .updatedAt) locale = try container.decodeIfPresent(String.self, forKey: .locale) revision = try container.decodeIfPresent(Int.self, forKey: .revision) - contentTypeInfo = try container.decodeIfPresent(Link.self, forKey: .contentTypeId) + contentTypeInfo = try container.decodeIfPresent(Link.self, forKey: .contentType) } private enum CodingKeys: String, CodingKey { - case id, type, createdAt, updatedAt, locale, revision - case contentTypeId = "contentType" + case id, type, createdAt, updatedAt, locale, revision, contentType } } diff --git a/Tests/ContentfulTests/ContentfulTests.swift b/Tests/ContentfulTests/ContentfulTests.swift index 6ac97464..8bdcb741 100644 --- a/Tests/ContentfulTests/ContentfulTests.swift +++ b/Tests/ContentfulTests/ContentfulTests.swift @@ -18,7 +18,7 @@ struct TestClientFactory { static func testClient(withCassetteNamed cassetteName: String, spaceId: String? = nil, accessToken: String? = nil, - contentModel: ContentModel? = nil, + contentTypeClasses: [EntryDecodable.Type]? = nil, clientConfiguration: ClientConfiguration = .default) -> Client { let client: Client @@ -29,9 +29,9 @@ struct TestClientFactory { var apiCoverageConfiguration = clientConfiguration // Mutable copy. apiCoverageConfiguration.server = "127.0.0.1:5000" apiCoverageConfiguration.secure = false - client = Client(spaceId: testSpaceId, accessToken: testAccessToken, clientConfiguration: apiCoverageConfiguration, contentModel: contentModel) + client = Client(spaceId: testSpaceId, accessToken: testAccessToken, clientConfiguration: apiCoverageConfiguration, contentTypeClasses: contentTypeClasses) #else - client = Client(spaceId: testSpaceId, accessToken: testAccessToken, clientConfiguration: clientConfiguration, contentModel: contentModel) + client = Client(spaceId: testSpaceId, accessToken: testAccessToken, clientConfiguration: clientConfiguration, contentTypeClasses: contentTypeClasses) let dvrSession = DVR.Session(cassetteName: cassetteName, backingSession: client.urlSession) client.urlSession = dvrSession #endif diff --git a/Tests/ContentfulTests/DVRRecordings/LinkResolverTests.json b/Tests/ContentfulTests/DVRRecordings/LinkResolverTests.json new file mode 100644 index 00000000..2c85e13e --- /dev/null +++ b/Tests/ContentfulTests/DVRRecordings/LinkResolverTests.json @@ -0,0 +1,35 @@ +{ + "interactions" : [ + { + "response" : { + "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJzbWYwc3FpdTBjNXMiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiN0J3RmlNMG54Q1M0RUdZYUlBSWt5VSIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNy0xMC0xMFQwNzowODo1Ni4wNTRaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTctMTAtMTBUMDc6MDg6NTYuMDU0WiIsCiAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogInNpbmdsZVJlY29yZCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgInRleHRCb2R5IjogIlJlY29yZCB3aXRoIGxpbmtzIGFycmF5IiwKICAgICAgICAiYXJyYXlMaW5rRmllbGQiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgICAiaWQiOiAiMlhZZEFQaVIwSTZTTUFHaUNPRXVrVSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAgICJpZCI6ICIzUTByUGtpbURtdW9DUXFnVWlxS1V1IgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiRW50cnkiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogInNtZjBzcWl1MGM1cyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICIyWFlkQVBpUjBJNlNNQUdpQ09FdWtVIiwKICAgICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNy0wNy0xNFQwOToxMDoyMC43MDNaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxNy0wNy0yNlQxMToyOToxMi41NzJaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgICAiaWQiOiAibGluayIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgImF3ZXNvbWVMaW5rVGl0bGUiOiAiQVdFU09NRUxJTkshISEiCiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJzbWYwc3FpdTBjNXMiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiM1EwclBraW1EbXVvQ1FxZ1VpcUtVdSIsCiAgICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTctMDctMjZUMTE6Mjk6NTUuNjA4WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTctMDctMjZUMTE6Mjk6NTUuNjA4WiIsCiAgICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICAgImlkIjogImxpbmsiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJhd2Vzb21lTGlua1RpdGxlIjogIlRoZSBzZWNvbmQgbGluayIKICAgICAgICB9CiAgICAgIH0KICAgIF0KICB9Cn0K", + "url" : "https:\/\/cdn.contentful.com\/spaces\/smf0sqiu0c5s\/entries?content_type=singleRecord&sys.id=7BwFiM0nxCS4EGYaIAIkyU" + }, + "recorded_at" : 1507635965.005794, + "request" : { + "headers" : { + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", + "Authorization" : "Bearer 14d305ad526d4487e21a99b5b9313a8877ce6fbf540f02b12189eea61550ef34" + }, + "method" : "GET", + "url" : "https:\/\/cdn.contentful.com\/spaces\/smf0sqiu0c5s\/entries?content_type=singleRecord&sys.id=7BwFiM0nxCS4EGYaIAIkyU" + } + }, + { + "response" : { + "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJTcGFjZSIsCiAgICAiaWQiOiAic21mMHNxaXUwYzVzIgogIH0sCiAgIm5hbWUiOiAiQ29tcGxleC1TeW5jLVRlc3QtU3BhY2UiLAogICJsb2NhbGVzIjogWwogICAgewogICAgICAiY29kZSI6ICJlbi1VUyIsCiAgICAgICJkZWZhdWx0IjogdHJ1ZSwKICAgICAgIm5hbWUiOiAiVS5TLiBFbmdsaXNoIiwKICAgICAgImZhbGxiYWNrQ29kZSI6IG51bGwKICAgIH0sCiAgICB7CiAgICAgICJjb2RlIjogImVzLU1YIiwKICAgICAgImRlZmF1bHQiOiBmYWxzZSwKICAgICAgIm5hbWUiOiAiU3BhbmlzaCAoTWV4aWNvKSIsCiAgICAgICJmYWxsYmFja0NvZGUiOiAiZW4tVVMiCiAgICB9CiAgXQp9Cg==", + "url" : "https:\/\/cdn.contentful.com\/spaces\/smf0sqiu0c5s\/" + }, + "recorded_at" : 1507635965.0272861, + "request" : { + "headers" : { + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", + "Authorization" : "Bearer 14d305ad526d4487e21a99b5b9313a8877ce6fbf540f02b12189eea61550ef34" + }, + "method" : "GET", + "url" : "https:\/\/cdn.contentful.com\/spaces\/smf0sqiu0c5s\/" + } + } + ], + "name" : "CanResolveArrayOfLinksTests" +} diff --git a/Tests/ContentfulTests/DVRRecordings/QueryTests.json b/Tests/ContentfulTests/DVRRecordings/QueryTests.json index 9bc7d98e..e1f48497 100644 --- a/Tests/ContentfulTests/DVRRecordings/QueryTests.json +++ b/Tests/ContentfulTests/DVRRecordings/QueryTests.json @@ -2,38 +2,13 @@ "interactions" : [ { "response" : { - "status" : 200, - "headers" : { - "Date" : "Wed, 16 Aug 2017 11:42:51 GMT", - "Content-Length" : "869", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "\"2a6587bde15212bce014b475202befb5\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "0ed448318699c4ec3ba2a0e1c201127b", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883771.032322,VS0,VE150", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Cache-Control" : "max-age=0", - "Via" : "1.1 varnish" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZ2FyZmllbGQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuODIxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA4LTI3VDEwOjA5OjA3LjkyOVoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkdhcmZpZWxkIiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAibGFzYWduYSIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJvcmFuZ2UiLAogICAgICAgICJiaXJ0aGRheSI6ICIxOTc5LTA2LTE4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGlmZXMiOiBudWxsLAogICAgICAgICJsaXZlcyI6IDkKICAgICAgfQogICAgfQogIF0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.color%5Bne%5D=gray&content_type=cat&fields.lives=9" }, - "recorded_at" : 1502883771.236544, + "recorded_at" : 1507565687.496803, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -42,38 +17,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Date" : "Wed, 16 Aug 2017 11:42:51 GMT", - "Content-Length" : "344", - "Age" : "21", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "\"17f6b9f68596176aed46fa020bf235af\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "1", - "X-Cache" : "HIT", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "dad6c0dd0e49d5dacdba15037445aac6", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883771.254973,VS0,VE0", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Cache-Control" : "max-age=0", - "Via" : "1.1 varnish" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJTcGFjZSIsCiAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogIH0sCiAgIm5hbWUiOiAiQ29udGVudGZ1bCBFeGFtcGxlIEFQSSIsCiAgImxvY2FsZXMiOiBbCiAgICB7CiAgICAgICJjb2RlIjogImVuLVVTIiwKICAgICAgImRlZmF1bHQiOiB0cnVlLAogICAgICAibmFtZSI6ICJFbmdsaXNoIiwKICAgICAgImZhbGxiYWNrQ29kZSI6IG51bGwKICAgIH0sCiAgICB7CiAgICAgICJjb2RlIjogInRsaCIsCiAgICAgICJkZWZhdWx0IjogZmFsc2UsCiAgICAgICJuYW1lIjogIktsaW5nb24iLAogICAgICAiZmFsbGJhY2tDb2RlIjogImVuLVVTIgogICAgfQogIF0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/" }, - "recorded_at" : 1502883771.258013, + "recorded_at" : 1507565687.517555, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -82,38 +32,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Date" : "Wed, 16 Aug 2017 11:42:51 GMT", - "Content-Length" : "869", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "\"2a6587bde15212bce014b475202befb5\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "1", - "X-Cache" : "HIT", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "0ed448318699c4ec3ba2a0e1c201127b", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883771.279297,VS0,VE0", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Cache-Control" : "max-age=0", - "Via" : "1.1 varnish" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZ2FyZmllbGQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuODIxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA4LTI3VDEwOjA5OjA3LjkyOVoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkdhcmZpZWxkIiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAibGFzYWduYSIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJvcmFuZ2UiLAogICAgICAgICJiaXJ0aGRheSI6ICIxOTc5LTA2LTE4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGlmZXMiOiBudWxsLAogICAgICAgICJsaXZlcyI6IDkKICAgICAgfQogICAgfQogIF0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.color%5Bne%5D=gray&content_type=cat&fields.lives=9" }, - "recorded_at" : 1502883771.286271, + "recorded_at" : 1507565687.551369, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -122,39 +47,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1035", - "Date" : "Wed, 16 Aug 2017 11:42:51 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"c76b6c572141b78d9e4204b679b5c299\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "d1137c908743267de55a0f5af26978e8", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883771.328455,VS0,VE150", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDE1OjU4OjAyLjAxOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkhhcHB5IENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogImdyYXkiLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMDMtMTAtMjhUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJFbnRyeSI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjE5LjUxM1oiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTA0VDA5OjE5OjM5LjAyN1oiLAogICAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJuYW1lIjogIk55YW4gQ2F0IiwKICAgICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICAgInJhaW5ib3dzIiwKICAgICAgICAgICAgImZpc2giCiAgICAgICAgICBdLAogICAgICAgICAgImNvbG9yIjogInJhaW5ib3ciLAogICAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgICAibGl2ZXMiOiAxMzM3LAogICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0sCiAgICAiQXNzZXQiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiTnlhbiBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzRncDZ0YUF3VzRDbVNndW1xMmVrVW0vOWRhMGNkMTkzNjg3MWI4ZDcyMzQzZTg5NWEwMGQ2MTEvTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiAxMjI3MywKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAyNTAsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMjUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0KICB9Cn0K", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=cat&fields.color=gray" }, - "recorded_at" : 1502883771.481312, + "recorded_at" : 1507565687.6705751, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -163,39 +62,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1126", - "Date" : "Wed, 16 Aug 2017 11:42:51 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"e7d45ea40e055407d04c0d5a264c603b\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "808ddb2cc4f5e6473f9e60b605cc436c", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883772.531340,VS0,VE308", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDIsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDE1OjU4OjAyLjAxOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkhhcHB5IENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogImdyYXkiLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMDMtMTAtMjhUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZ2FyZmllbGQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuODIxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA4LTI3VDEwOjA5OjA3LjkyOVoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkdhcmZpZWxkIiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAibGFzYWduYSIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJvcmFuZ2UiLAogICAgICAgICJiaXJ0aGRheSI6ICIxOTc5LTA2LTE4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGlmZXMiOiBudWxsLAogICAgICAgICJsaXZlcyI6IDkKICAgICAgfQogICAgfQogIF0sCiAgImluY2x1ZGVzIjogewogICAgIkVudHJ5IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MTkuNTEzWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA1LAogICAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgICAicmFpbmJvd3MiLAogICAgICAgICAgICAiZmlzaCIKICAgICAgICAgIF0sCiAgICAgICAgICAiY29sb3IiOiAicmFpbmJvdyIsCiAgICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJiaXJ0aGRheSI6ICIyMDExLTA0LTA0VDIyOjAwOjAwKzAwOjAwIiwKICAgICAgICAgICJsaXZlcyI6IDEzMzcsCiAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSwKICAgICJBc3NldCI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjdaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToxMToyNC4zNjFaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJIYXBweSBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzNNWlBualpUSXNrQUlJa3V1b3NDc3MvMzgyYTQ4ZGZhMmNiMTZjNDdhYTJjNzJmN2IyM2JmMDkvaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogNTk5MzksCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjczLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDM5NwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImhhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=cat&fields.likes%5Bnin%5D=rainbows" }, - "recorded_at" : 1502883771.843685, + "recorded_at" : 1507565687.868818, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -204,39 +77,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1066", - "Date" : "Wed, 16 Aug 2017 11:42:52 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"88c5378f0e37675db35d48a0b4c30c82\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "ae5ffd39cd2347c2425f45d7e6d134c1", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883772.869587,VS0,VE176", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDMsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdhcmZpZWxkIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjgyMVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOC0yN1QxMDowOTowNy45MjlaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJHYXJmaWVsZCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImxhc2FnbmEiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAib3JhbmdlIiwKICAgICAgICAiYmlydGhkYXkiOiAiMTk3OS0wNi0xOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpZmVzIjogbnVsbCwKICAgICAgICAibGl2ZXMiOiA5CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDE1OjU4OjAyLjAxOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkhhcHB5IENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogImdyYXkiLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMDMtMTAtMjhUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJBc3NldCI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjdaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToxMToyNC4zNjFaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJIYXBweSBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzNNWlBualpUSXNrQUlJa3V1b3NDc3MvMzgyYTQ4ZGZhMmNiMTZjNDdhYTJjNzJmN2IyM2JmMDkvaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogNTk5MzksCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjczLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDM5NwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImhhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.color%5Bexists%5D=true&content_type=cat" }, - "recorded_at" : 1502883772.048764, + "recorded_at" : 1507565687.993288, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -245,39 +92,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1066", - "Date" : "Wed, 16 Aug 2017 11:42:52 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"88c5378f0e37675db35d48a0b4c30c82\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "feb881c411b82afec175396afc0ce366", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883772.070856,VS0,VE176", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDMsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdhcmZpZWxkIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjgyMVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOC0yN1QxMDowOTowNy45MjlaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJHYXJmaWVsZCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImxhc2FnbmEiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAib3JhbmdlIiwKICAgICAgICAiYmlydGhkYXkiOiAiMTk3OS0wNi0xOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpZmVzIjogbnVsbCwKICAgICAgICAibGl2ZXMiOiA5CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDE1OjU4OjAyLjAxOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkhhcHB5IENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogImdyYXkiLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMDMtMTAtMjhUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJBc3NldCI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjdaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToxMToyNC4zNjFaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJIYXBweSBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzNNWlBualpUSXNrQUlJa3V1b3NDc3MvMzgyYTQ4ZGZhMmNiMTZjNDdhYTJjNzJmN2IyM2JmMDkvaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogNTk5MzksCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjczLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDM5NwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImhhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=cat&sys.updatedAt%5Blte%5D=2015-01-01T00:00:00Z" }, - "recorded_at" : 1502883772.356613, + "recorded_at" : 1507565688.1977601, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -286,39 +107,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1971", - "Date" : "Wed, 16 Aug 2017 11:42:52 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"f866313cb9a429e699399ef58daae63d\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "7e060c344887e3b37034ccb8b9c8f316", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883772.382865,VS0,VE165", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogMCwKICAibGltaXQiOiAxMDAsCiAgIml0ZW1zIjogWwogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjdxVkJsQ2pwV0U4Nk9zZW80MGdBRVkiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MzguMjU4WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA0LTE1VDA4OjIyOjIyLjAxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsCiAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJnZTF4SHlIM1FPV3VjS1dDQ0FnSUciLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MjMuMjEwWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQzOjIzLjIxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJQYXJpcyIsCiAgICAgICAgImNlbnRlciI6IHsKICAgICAgICAgICJsb24iOiAyLjM1MjIyMTkwMDAwMDAxNzcsCiAgICAgICAgICAibGF0IjogNDguODU2NjE0CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjVFVE1SemtsOUtNNG9teU13S0FPa2kiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NTcuNzUyWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA4LTIzVDE0OjQyOjM1LjIwN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDMsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJMb25kb24iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTAuMTI1NDg3MTk5OTk5OTUyMjgsCiAgICAgICAgICAibGF0IjogNTEuNTA4NTE1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjRNVTFzM3BvdGlVRU0yRzRva1lPcXciLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NDUuOTI2WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQyOjQ1LjkyNloiLAogICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJCZXJsaW4iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogMTMuNDA0OTUzOTk5OTk5OTc1LAogICAgICAgICAgImxhdCI6IDUyLjUyMDAwNjU5OTk5OTk5CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjZLbnRhWVhhSFN5SXc4TTZlbzI2T0siLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMTEtMDZUMDk6NDU6MjcuNDc1WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDA5OjEzOjM3LjgwOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJkb2ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkRvZ2UiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJzdWNoIGpzb25cbndvdyIsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICIxeDB4cFh1NHBTR1M0T3VrU3lXR1VLIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJqYWtlIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIyLjA5NloiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMi0xOFQxMzoxMDoyNi4yMTJaIiwKICAgICAgICAicmV2aXNpb24iOiA1LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiZG9nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJKYWtlIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiQmFjb24gcGFuY2FrZXMsIG1ha2luJyBiYWNvbiBwYW5jYWtlcyEiLAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAiamFrZSIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZmlubiIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMS40NTBaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDlUMTY6MTU6MDEuMjk3WiIsCiAgICAgICAgInJldmlzaW9uIjogNiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImh1bWFuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJGaW5uIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmVhcmxlc3MgYWR2ZW50dXJlciEgRGVmZW5kZXIgb2YgcGFuY2FrZXMuIiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAiYWR2ZW50dXJlIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJnYXJmaWVsZCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMC44MjFaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDgtMjdUMTA6MDk6MDcuOTI5WiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiR2FyZmllbGQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJsYXNhZ25hIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogIm9yYW5nZSIsCiAgICAgICAgImJpcnRoZGF5IjogIjE5NzktMDYtMThUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaWZlcyI6IG51bGwsCiAgICAgICAgImxpdmVzIjogOQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjE3MVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQxNTo1ODowMi4wMThaIiwKICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJIYXBweSBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJjaGVlemJ1cmdlciIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDAzLTEwLTI4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MTkuNTEzWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTA0VDA5OjE5OjM5LjAyN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIk55YW4gQ2F0IiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAicmFpbmJvd3MiLAogICAgICAgICAgImZpc2giCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAicmFpbmJvdyIsCiAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMTEtMDQtMDRUMjI6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEzMzcsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgImluY2x1ZGVzIjogewogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMTEtMDZUMDk6NDU6MTAuMDAwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6Mjc6MTQuOTE3WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiRG9nZSIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibmljZSBwaWN0dXJlIiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8xeDB4cFh1NHBTR1M0T3VrU3lXR1VLL2NjMTIzOWM2Mzg1NDI4ZWYyNmY0MTgwMTkwNTMyODE4L2RvZ2UuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1MjI5NDMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogNTgwMCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiA0MzUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiZG9nZS5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjYwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MjI6MzkuNDY2WiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSmFrZSIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGhsdGVRQVhTOGlTMFlDTVU2UU1XZy8yYTRkODI2MTQ0ZjAxNDEwOTM2NGNjZjVjODkxZDJkZC9qYWtlLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMjA0ODAsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMTAwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDE2MQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImpha2UucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?order=-sys.createdAt" }, - "recorded_at" : 1502883772.551725, + "recorded_at" : 1507565688.226757, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -327,39 +122,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1958", - "Date" : "Wed, 16 Aug 2017 11:42:52 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"b303c1577831b85822538c1896d73aab\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "453b9f7e5316946ceb9da3f2c1f175c5", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883773.580006,VS0,VE204", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogMCwKICAibGltaXQiOiAxMDAsCiAgIml0ZW1zIjogWwogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MTkuNTEzWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTA0VDA5OjE5OjM5LjAyN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIk55YW4gQ2F0IiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAicmFpbmJvd3MiLAogICAgICAgICAgImZpc2giCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAicmFpbmJvdyIsCiAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMTEtMDQtMDRUMjI6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEzMzcsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMC4xNzFaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMTU6NTg6MDIuMDE4WiIsCiAgICAgICAgInJldmlzaW9uIjogOCwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAiY2hlZXpidXJnZXIiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAiZ3JheSIsCiAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAwMy0xMC0yOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMSwKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJnYXJmaWVsZCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMC44MjFaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDgtMjdUMTA6MDk6MDcuOTI5WiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiR2FyZmllbGQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJsYXNhZ25hIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogIm9yYW5nZSIsCiAgICAgICAgImJpcnRoZGF5IjogIjE5NzktMDYtMThUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaWZlcyI6IG51bGwsCiAgICAgICAgImxpdmVzIjogOQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImZpbm4iLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjEuNDUwWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTA5VDE2OjE1OjAxLjI5N1oiLAogICAgICAgICJyZXZpc2lvbiI6IDYsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJodW1hbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiRmlubiIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkZlYXJsZXNzIGFkdmVudHVyZXIhIERlZmVuZGVyIG9mIHBhbmNha2VzLiIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImFkdmVudHVyZSIKICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMi4wOTZaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6MTA6MjYuMjEyWiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImRvZyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiSmFrZSIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkJhY29uIHBhbmNha2VzLCBtYWtpbicgYmFjb24gcGFuY2FrZXMhIiwKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogImpha2UiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjZLbnRhWVhhSFN5SXc4TTZlbzI2T0siLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMTEtMDZUMDk6NDU6MjcuNDc1WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDA5OjEzOjM3LjgwOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJkb2ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkRvZ2UiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJzdWNoIGpzb25cbndvdyIsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICIxeDB4cFh1NHBTR1M0T3VrU3lXR1VLIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI0TVUxczNwb3RpVUVNMkc0b2tZT3F3IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQyOjQ1LjkyNloiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0Mjo0NS45MjZaIiwKICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiMXQ5SWJjZmRDazZtMDR1SVNTc2FJSyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiQmVybGluIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IDEzLjQwNDk1Mzk5OTk5OTk3NSwKICAgICAgICAgICJsYXQiOiA1Mi41MjAwMDY1OTk5OTk5OQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI1RVRNUnprbDlLTTRvbXlNd0tBT2tpIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQyOjU3Ljc1MloiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxNC0wOC0yM1QxNDo0MjozNS4yMDdaIiwKICAgICAgICAicmV2aXNpb24iOiAzLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiMXQ5SWJjZmRDazZtMDR1SVNTc2FJSyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTG9uZG9uIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0wLjEyNTQ4NzE5OTk5OTk1MjI4LAogICAgICAgICAgImxhdCI6IDUxLjUwODUxNQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJnZTF4SHlIM1FPV3VjS1dDQ0FnSUciLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MjMuMjEwWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQzOjIzLjIxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJQYXJpcyIsCiAgICAgICAgImNlbnRlciI6IHsKICAgICAgICAgICJsb24iOiAyLjM1MjIyMTkwMDAwMDAxNzcsCiAgICAgICAgICAibGF0IjogNDguODU2NjE0CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjdxVkJsQ2pwV0U4Nk9zZW80MGdBRVkiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MzguMjU4WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA0LTE1VDA4OjIyOjIyLjAxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsCiAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgImluY2x1ZGVzIjogewogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMTEtMDZUMDk6NDU6MTAuMDAwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6Mjc6MTQuOTE3WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiRG9nZSIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibmljZSBwaWN0dXJlIiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8xeDB4cFh1NHBTR1M0T3VrU3lXR1VLL2NjMTIzOWM2Mzg1NDI4ZWYyNmY0MTgwMTkwNTMyODE4L2RvZ2UuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1MjI5NDMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogNTgwMCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiA0MzUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiZG9nZS5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjYwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MjI6MzkuNDY2WiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSmFrZSIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGhsdGVRQVhTOGlTMFlDTVU2UU1XZy8yYTRkODI2MTQ0ZjAxNDEwOTM2NGNjZjVjODkxZDJkZC9qYWtlLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMjA0ODAsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMTAwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDE2MQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImpha2UucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?order=sys.createdAt" }, - "recorded_at" : 1502883772.828165, + "recorded_at" : 1507565688.2540011, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -368,39 +137,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1988", - "Date" : "Wed, 16 Aug 2017 11:42:53 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"f6def95cb9fb879e0c62e14575a291b1\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "808575228c59d6aa06342fdecac9c845", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883773.856483,VS0,VE166", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogMCwKICAibGltaXQiOiAxMDAsCiAgIml0ZW1zIjogWwogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdhcmZpZWxkIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjgyMVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOC0yN1QxMDowOTowNy45MjlaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJHYXJmaWVsZCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImxhc2FnbmEiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAib3JhbmdlIiwKICAgICAgICAiYmlydGhkYXkiOiAiMTk3OS0wNi0xOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpZmVzIjogbnVsbCwKICAgICAgICAibGl2ZXMiOiA5CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiNE1VMXMzcG90aVVFTTJHNG9rWU9xdyIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0Mjo0NS45MjZaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NDUuOTI2WiIsCiAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkJlcmxpbiIsCiAgICAgICAgImNlbnRlciI6IHsKICAgICAgICAgICJsb24iOiAxMy40MDQ5NTM5OTk5OTk5NzUsCiAgICAgICAgICAibGF0IjogNTIuNTIwMDA2NTk5OTk5OTkKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiNktudGFZWGFIU3lJdzhNNmVvMjZPSyIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0xMS0wNlQwOTo0NToyNy40NzVaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMDk6MTM6MzcuODA4WiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImRvZyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiRG9nZSIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogInN1Y2gganNvblxud293IiwKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIjF4MHhwWHU0cFNHUzRPdWtTeVdHVUsiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjVFVE1SemtsOUtNNG9teU13S0FPa2kiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NTcuNzUyWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA4LTIzVDE0OjQyOjM1LjIwN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDMsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJMb25kb24iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTAuMTI1NDg3MTk5OTk5OTUyMjgsCiAgICAgICAgICAibGF0IjogNTEuNTA4NTE1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjE3MVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQxNTo1ODowMi4wMThaIiwKICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJIYXBweSBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJjaGVlemJ1cmdlciIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDAzLTEwLTI4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImpha2UiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjIuMDk2WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTEyLTE4VDEzOjEwOjI2LjIxMloiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJkb2ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkpha2UiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJCYWNvbiBwYW5jYWtlcywgbWFraW4nIGJhY29uIHBhbmNha2VzISIsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJqYWtlIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJnZTF4SHlIM1FPV3VjS1dDQ0FnSUciLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MjMuMjEwWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQzOjIzLjIxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJQYXJpcyIsCiAgICAgICAgImNlbnRlciI6IHsKICAgICAgICAgICJsb24iOiAyLjM1MjIyMTkwMDAwMDAxNzcsCiAgICAgICAgICAibGF0IjogNDguODU2NjE0CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MTkuNTEzWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTA0VDA5OjE5OjM5LjAyN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIk55YW4gQ2F0IiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAicmFpbmJvd3MiLAogICAgICAgICAgImZpc2giCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAicmFpbmJvdyIsCiAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMTEtMDQtMDRUMjI6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEzMzcsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJmaW5uIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIxLjQ1MFoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wOVQxNjoxNTowMS4yOTdaIiwKICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiaHVtYW4iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkZpbm4iLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJGZWFybGVzcyBhZHZlbnR1cmVyISBEZWZlbmRlciBvZiBwYW5jYWtlcy4iLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJhZHZlbnR1cmUiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjdxVkJsQ2pwV0U4Nk9zZW80MGdBRVkiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MzguMjU4WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA0LTE1VDA4OjIyOjIyLjAxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsCiAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgImluY2x1ZGVzIjogewogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMTEtMDZUMDk6NDU6MTAuMDAwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6Mjc6MTQuOTE3WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiRG9nZSIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibmljZSBwaWN0dXJlIiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8xeDB4cFh1NHBTR1M0T3VrU3lXR1VLL2NjMTIzOWM2Mzg1NDI4ZWYyNmY0MTgwMTkwNTMyODE4L2RvZ2UuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1MjI5NDMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogNTgwMCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiA0MzUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiZG9nZS5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjYwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MjI6MzkuNDY2WiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSmFrZSIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGhsdGVRQVhTOGlTMFlDTVU2UU1XZy8yYTRkODI2MTQ0ZjAxNDEwOTM2NGNjZjVjODkxZDJkZC9qYWtlLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMjA0ODAsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMTAwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDE2MQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImpha2UucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?sys.updatedAt%5Blte%5D=2015-01-01T00:00:00.000Z" }, - "recorded_at" : 1502883773.026764, + "recorded_at" : 1507565688.281296, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -409,39 +152,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1995", - "Date" : "Wed, 16 Aug 2017 11:42:53 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"e58d626785a235f86749f25a83ea33f7\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "dbab5a045ada09c6d7ac75c2fcedf40a", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883773.056310,VS0,VE177", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogMCwKICAibGltaXQiOiAxMDAsCiAgIml0ZW1zIjogWwogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjRNVTFzM3BvdGlVRU0yRzRva1lPcXciLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NDUuOTI2WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQyOjQ1LjkyNloiLAogICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJCZXJsaW4iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogMTMuNDA0OTUzOTk5OTk5OTc1LAogICAgICAgICAgImxhdCI6IDUyLjUyMDAwNjU5OTk5OTk5CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdlMXhIeUgzUU9XdWNLV0NDQWdJRyIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0MzoyMy4yMTBaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MjMuMjEwWiIsCiAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIlBhcmlzIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IDIuMzUyMjIxOTAwMDAwMDE3NywKICAgICAgICAgICJsYXQiOiA0OC44NTY2MTQKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiNktudGFZWGFIU3lJdzhNNmVvMjZPSyIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0xMS0wNlQwOTo0NToyNy40NzVaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMDk6MTM6MzcuODA4WiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImRvZyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiRG9nZSIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogInN1Y2gganNvblxud293IiwKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIjF4MHhwWHU0cFNHUzRPdWtTeVdHVUsiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjdxVkJsQ2pwV0U4Nk9zZW80MGdBRVkiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MzguMjU4WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA0LTE1VDA4OjIyOjIyLjAxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsCiAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJnYXJmaWVsZCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMC44MjFaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDgtMjdUMTA6MDk6MDcuOTI5WiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiR2FyZmllbGQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJsYXNhZ25hIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogIm9yYW5nZSIsCiAgICAgICAgImJpcnRoZGF5IjogIjE5NzktMDYtMThUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaWZlcyI6IG51bGwsCiAgICAgICAgImxpdmVzIjogOQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjVFVE1SemtsOUtNNG9teU13S0FPa2kiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NTcuNzUyWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA4LTIzVDE0OjQyOjM1LjIwN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDMsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJMb25kb24iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTAuMTI1NDg3MTk5OTk5OTUyMjgsCiAgICAgICAgICAibGF0IjogNTEuNTA4NTE1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImpha2UiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjIuMDk2WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTEyLTE4VDEzOjEwOjI2LjIxMloiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJkb2ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkpha2UiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJCYWNvbiBwYW5jYWtlcywgbWFraW4nIGJhY29uIHBhbmNha2VzISIsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJqYWtlIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjE5LjUxM1oiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wNFQwOToxOTozOS4wMjdaIiwKICAgICAgICAicmV2aXNpb24iOiA1LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJOeWFuIENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgInJhaW5ib3dzIiwKICAgICAgICAgICJmaXNoIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogInJhaW5ib3ciLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDExLTA0LTA0VDIyOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxMzM3LAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZmlubiIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMS40NTBaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDlUMTY6MTU6MDEuMjk3WiIsCiAgICAgICAgInJldmlzaW9uIjogNiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImh1bWFuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJGaW5uIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmVhcmxlc3MgYWR2ZW50dXJlciEgRGVmZW5kZXIgb2YgcGFuY2FrZXMuIiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAiYWR2ZW50dXJlIgogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMC4xNzFaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMTU6NTg6MDIuMDE4WiIsCiAgICAgICAgInJldmlzaW9uIjogOCwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAiY2hlZXpidXJnZXIiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAiZ3JheSIsCiAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAwMy0xMC0yOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMSwKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgImluY2x1ZGVzIjogewogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMTEtMDZUMDk6NDU6MTAuMDAwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6Mjc6MTQuOTE3WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiRG9nZSIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibmljZSBwaWN0dXJlIiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8xeDB4cFh1NHBTR1M0T3VrU3lXR1VLL2NjMTIzOWM2Mzg1NDI4ZWYyNmY0MTgwMTkwNTMyODE4L2RvZ2UuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1MjI5NDMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogNTgwMCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiA0MzUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiZG9nZS5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjYwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MjI6MzkuNDY2WiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSmFrZSIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGhsdGVRQVhTOGlTMFlDTVU2UU1XZy8yYTRkODI2MTQ0ZjAxNDEwOTM2NGNjZjVjODkxZDJkZC9qYWtlLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMjA0ODAsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMTAwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDE2MQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImpha2UucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?order=sys.revision,sys.id" }, - "recorded_at" : 1502883773.239394, + "recorded_at" : 1507565688.3104329, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -450,38 +167,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Date" : "Wed, 16 Aug 2017 11:42:53 GMT", - "Content-Length" : "835", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "\"053c993754b8c043f386e44920ca933c\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "3d6eb1137908211202fb31e5facc9eeb", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883773.271172,VS0,VE146", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Cache-Control" : "max-age=0", - "Via" : "1.1 varnish" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiN3FWQmxDanBXRTg2T3NlbzQwZ0FFWSIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0MzozOC4yNThaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDQtMTVUMDg6MjI6MjIuMDEwWiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIlNhbiBGcmFuY2lzY28iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTEyMi40MTk0MTU1MDAwMDAwMSwKICAgICAgICAgICJsYXQiOiAzNy43NzQ5Mjk1CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.center%5Bwithin%5D=36.0,-124.0,40.0,-120.0&content_type=1t9IbcfdCk6m04uISSsaIK" }, - "recorded_at" : 1502883773.442182, + "recorded_at" : 1507565688.4373569, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -490,39 +182,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "625", - "Date" : "Wed, 16 Aug 2017 11:42:53 GMT", - "Age" : "23", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"0c6eed5b52826888d5a1040d77dca5a2\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "1", - "X-Cache" : "HIT", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "3f4ad404e13cde202ddf9fb68d61a4c8", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883773.464470,VS0,VE1", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMi4wOTZaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6MTA6MjYuMjEyWiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImRvZyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiSmFrZSIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkJhY29uIHBhbmNha2VzLCBtYWtpbicgYmFjb24gcGFuY2FrZXMhIiwKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogImpha2UiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiQXNzZXQiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJqYWtlIiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToyMjozOS40NjZaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJKYWtlIiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80aGx0ZVFBWFM4aVMwWUNNVTZRTVdnLzJhNGQ4MjYxNDRmMDE0MTA5MzY0Y2NmNWM4OTFkMmRkL2pha2UucG5nIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiAyMDQ4MCwKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAxMDAsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMTYxCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiamFrZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=dog&query=bacon" }, - "recorded_at" : 1502883773.468957, + "recorded_at" : 1507565688.5575941, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -531,39 +197,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "625", - "Date" : "Wed, 16 Aug 2017 11:42:53 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"0c6eed5b52826888d5a1040d77dca5a2\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "bd70a1add6b8970e1d8f2b5cc2fe1c53", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883773.488337,VS0,VE144", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMi4wOTZaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6MTA6MjYuMjEyWiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImRvZyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiSmFrZSIsCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkJhY29uIHBhbmNha2VzLCBtYWtpbicgYmFjb24gcGFuY2FrZXMhIiwKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogImpha2UiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiQXNzZXQiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJqYWtlIiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToyMjozOS40NjZaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJKYWtlIiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80aGx0ZVFBWFM4aVMwWUNNVTZRTVdnLzJhNGQ4MjYxNDRmMDE0MTA5MzY0Y2NmNWM4OTFkMmRkL2pha2UucG5nIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiAyMDQ4MCwKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAxMDAsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMTYxCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiamFrZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.description%5Bmatch%5D=bacon%20pancakes&content_type=dog" }, - "recorded_at" : 1502883773.63543, + "recorded_at" : 1507565688.583431, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -572,39 +212,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "623", - "Date" : "Wed, 16 Aug 2017 11:42:53 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"5306d6c6ad6ceb4b7989fe13ad956c62\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "3bb6d41f2b285700f9fc9baa44ee9ab7", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883774.655015,VS0,VE155", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDQsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiN3FWQmxDanBXRTg2T3NlbzQwZ0FFWSIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0MzozOC4yNThaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDQtMTVUMDg6MjI6MjIuMDEwWiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIlNhbiBGcmFuY2lzY28iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTEyMi40MTk0MTU1MDAwMDAwMSwKICAgICAgICAgICJsYXQiOiAzNy43NzQ5Mjk1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjVFVE1SemtsOUtNNG9teU13S0FPa2kiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NTcuNzUyWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA4LTIzVDE0OjQyOjM1LjIwN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDMsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJMb25kb24iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTAuMTI1NDg3MTk5OTk5OTUyMjgsCiAgICAgICAgICAibGF0IjogNTEuNTA4NTE1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdlMXhIeUgzUU9XdWNLV0NDQWdJRyIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0MzoyMy4yMTBaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MjMuMjEwWiIsCiAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIlBhcmlzIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IDIuMzUyMjIxOTAwMDAwMDE3NywKICAgICAgICAgICJsYXQiOiA0OC44NTY2MTQKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiNE1VMXMzcG90aVVFTTJHNG9rWU9xdyIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0Mjo0NS45MjZaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NDUuOTI2WiIsCiAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkJlcmxpbiIsCiAgICAgICAgImNlbnRlciI6IHsKICAgICAgICAgICJsb24iOiAxMy40MDQ5NTM5OTk5OTk5NzUsCiAgICAgICAgICAibGF0IjogNTIuNTIwMDA2NTk5OTk5OTkKICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdCn0K", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.center%5Bnear%5D=38.0,-122.0&content_type=1t9IbcfdCk6m04uISSsaIK" }, - "recorded_at" : 1502883773.851115, + "recorded_at" : 1507565688.703373, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -613,39 +227,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1066", - "Date" : "Wed, 16 Aug 2017 11:42:54 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"23068032dce8e97ca0d0f03d9bdf51ce\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "bef8059d39c81fe145251e2573b56f32", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883774.872733,VS0,VE158", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDMsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjE3MVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQxNTo1ODowMi4wMThaIiwKICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJIYXBweSBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJjaGVlemJ1cmdlciIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDAzLTEwLTI4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdhcmZpZWxkIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjgyMVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOC0yN1QxMDowOTowNy45MjlaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJHYXJmaWVsZCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImxhc2FnbmEiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAib3JhbmdlIiwKICAgICAgICAiYmlydGhkYXkiOiAiMTk3OS0wNi0xOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpZmVzIjogbnVsbCwKICAgICAgICAibGl2ZXMiOiA5CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJBc3NldCI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjdaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToxMToyNC4zNjFaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJIYXBweSBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzNNWlBualpUSXNrQUlJa3V1b3NDc3MvMzgyYTQ4ZGZhMmNiMTZjNDdhYTJjNzJmN2IyM2JmMDkvaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogNTk5MzksCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjczLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDM5NwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImhhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=cat&order=sys.createdAt" }, - "recorded_at" : 1502883774.035518, + "recorded_at" : 1507565688.8266799, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -654,39 +242,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1066", - "Date" : "Wed, 16 Aug 2017 11:42:54 GMT", - "Age" : "6390", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"88c5378f0e37675db35d48a0b4c30c82\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "1", - "X-Cache" : "HIT", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "fa6c8218a5b09671954042ca26023cdd", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883774.061285,VS0,VE0", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDMsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdhcmZpZWxkIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjgyMVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOC0yN1QxMDowOTowNy45MjlaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJHYXJmaWVsZCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImxhc2FnbmEiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAib3JhbmdlIiwKICAgICAgICAiYmlydGhkYXkiOiAiMTk3OS0wNi0xOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpZmVzIjogbnVsbCwKICAgICAgICAibGl2ZXMiOiA5CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDE1OjU4OjAyLjAxOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkhhcHB5IENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogImdyYXkiLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJueWFuY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImJpcnRoZGF5IjogIjIwMDMtMTAtMjhUMjM6MDA6MDArMDA6MDAiLAogICAgICAgICJsaXZlcyI6IDEsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJBc3NldCI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjdaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToxMToyNC4zNjFaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJIYXBweSBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzNNWlBualpUSXNrQUlJa3V1b3NDc3MvMzgyYTQ4ZGZhMmNiMTZjNDdhYTJjNzJmN2IyM2JmMDkvaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogNTk5MzksCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjczLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDM5NwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImhhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=cat" }, - "recorded_at" : 1502883774.092762, + "recorded_at" : 1507565688.8558609, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -695,39 +257,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "836", - "Date" : "Wed, 16 Aug 2017 11:42:54 GMT", - "Age" : "6386", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"a4d8e2ecb8a155e6ca6801cd4e60dd98\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "1", - "X-Cache" : "HIT", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "e26641cb232a195d4040ec756de5317a", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883774.113947,VS0,VE0", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, - "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDQsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE1OjExOjI0LjM2MVoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzNNWlBualpUSXNrQUlJa3V1b3NDc3MvMzgyYTQ4ZGZhMmNiMTZjNDdhYTJjNzJmN2IyM2JmMDkvaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgInNpemUiOiA1OTkzOSwKICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAiaGVpZ2h0IjogMzk3CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWUiOiAiaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80Z3A2dGFBd1c0Q21TZ3VtcTJla1VtLzlkYTBjZDE5MzY4NzFiOGQ3MjM0M2U4OTVhMDBkNjExL055YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgInNpemUiOiAxMjI3MywKICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAiaGVpZ2h0IjogMjUwCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWUiOiAiTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwKICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImpha2UiLAogICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjYwWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE1OjIyOjM5LjQ2NloiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAidGl0bGUiOiAiSmFrZSIsCiAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80aGx0ZVFBWFM4aVMwWUNNVTZRTVdnLzJhNGQ4MjYxNDRmMDE0MTA5MzY0Y2NmNWM4OTFkMmRkL2pha2UucG5nIiwKICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAic2l6ZSI6IDIwNDgwLAogICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgIndpZHRoIjogMTAwLAogICAgICAgICAgICAgICJoZWlnaHQiOiAxNjEKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJmaWxlTmFtZSI6ICJqYWtlLnBuZyIsCiAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICIxeDB4cFh1NHBTR1M0T3VrU3lXR1VLIiwKICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTExLTA2VDA5OjQ1OjEwLjAwMFoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMi0xOFQxMzoyNzoxNC45MTdaIiwKICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgInRpdGxlIjogIkRvZ2UiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJuaWNlIHBpY3R1cmUiLAogICAgICAgICJmaWxlIjogewogICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvMXgweHBYdTRwU0dTNE91a1N5V0dVSy9jYzEyMzljNjM4NTQyOGVmMjZmNDE4MDE5MDUzMjgxOC9kb2dlLmpwZyIsCiAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgInNpemUiOiA1MjI5NDMsCiAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAid2lkdGgiOiA1ODAwLAogICAgICAgICAgICAgICJoZWlnaHQiOiA0MzUwCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWUiOiAiZG9nZS5qcGciLAogICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXQp9Cg==", + "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDQsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNjBaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MjI6MzkuNDY2WiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJ0aXRsZSI6ICJKYWtlIiwKICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzRobHRlUUFYUzhpUzBZQ01VNlFNV2cvMmE0ZDgyNjE0NGYwMTQxMDkzNjRjY2Y1Yzg5MWQyZGQvamFrZS5wbmciLAogICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICJzaXplIjogMjA0ODAsCiAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAid2lkdGgiOiAxMDAsCiAgICAgICAgICAgICAgImhlaWdodCI6IDE2MQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImZpbGVOYW1lIjogImpha2UucG5nIiwKICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI2N1oiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNToxMToyNC4zNjFaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgInRpdGxlIjogIkhhcHB5IENhdCIsCiAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICJzaXplIjogNTk5MzksCiAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAid2lkdGgiOiAyNzMsCiAgICAgICAgICAgICAgImhlaWdodCI6IDM5NwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImZpbGVOYW1lIjogImhhcHB5Y2F0dy5qcGciLAogICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAidGl0bGUiOiAiTnlhbiBDYXQiLAogICAgICAgICJmaWxlIjogewogICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICJzaXplIjogMTIyNzMsCiAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAid2lkdGgiOiAyNTAsCiAgICAgICAgICAgICAgImhlaWdodCI6IDI1MAogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImZpbGVOYW1lIjogIk55YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICIxeDB4cFh1NHBTR1M0T3VrU3lXR1VLIiwKICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTExLTA2VDA5OjQ1OjEwLjAwMFoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMi0xOFQxMzoyNzoxNC45MTdaIiwKICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgInRpdGxlIjogIkRvZ2UiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJuaWNlIHBpY3R1cmUiLAogICAgICAgICJmaWxlIjogewogICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvMXgweHBYdTRwU0dTNE91a1N5V0dVSy9jYzEyMzljNjM4NTQyOGVmMjZmNDE4MDE5MDUzMjgxOC9kb2dlLmpwZyIsCiAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgInNpemUiOiA1MjI5NDMsCiAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAid2lkdGgiOiA1ODAwLAogICAgICAgICAgICAgICJoZWlnaHQiOiA0MzUwCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWUiOiAiZG9nZS5qcGciLAogICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/assets?mimetype_group=image" }, - "recorded_at" : 1502883774.117668, + "recorded_at" : 1507565688.8827381, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -736,39 +272,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1034", - "Date" : "Wed, 16 Aug 2017 11:42:54 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"9707115047cc402819250f844939b2aa\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "6b981cbf7036591b90a9f48620aefc4e", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883774.137132,VS0,VE165", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiRW50cnkiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMTU6NTg6MDIuMDE4WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgIm5hbWUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgICAgXSwKICAgICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiYmlydGhkYXkiOiAiMjAwMy0xMC0yOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdLAogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI2N1oiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE1OjExOjI0LjM2MVoiLAogICAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIkhhcHB5IENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvM01aUG5qWlRJc2tBSUlrdXVvc0Nzcy8zODJhNDhkZmEyY2IxNmM0N2FhMmM3MmY3YjIzYmYwOS9oYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1OTkzOSwKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAyNzMsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMzk3CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9qcGVnIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIk55YW4gQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80Z3A2dGFBd1c0Q21TZ3VtcTJla1VtLzlkYTBjZDE5MzY4NzFiOGQ3MjM0M2U4OTVhMDBkNjExL055YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMTIyNzMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjUwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDI1MAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogIk55YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.likes%5Bin%5D=rainbows&content_type=cat" }, - "recorded_at" : 1502883774.305446, + "recorded_at" : 1507565689.0047929, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -777,39 +287,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1130", - "Date" : "Wed, 16 Aug 2017 11:42:54 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"3bfc12799fa29f7a21d9547e45323fac\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "6b7a0802491a30c2e6de58936be53ffa", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883774.325352,VS0,VE149", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDIsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZ2FyZmllbGQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuODIxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA4LTI3VDEwOjA5OjA3LjkyOVoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkdhcmZpZWxkIiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAibGFzYWduYSIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJvcmFuZ2UiLAogICAgICAgICJiaXJ0aGRheSI6ICIxOTc5LTA2LTE4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGlmZXMiOiBudWxsLAogICAgICAgICJsaXZlcyI6IDkKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjE5LjUxM1oiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wNFQwOToxOTozOS4wMjdaIiwKICAgICAgICAicmV2aXNpb24iOiA1LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJOeWFuIENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgInJhaW5ib3dzIiwKICAgICAgICAgICJmaXNoIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogInJhaW5ib3ciLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDExLTA0LTA0VDIyOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxMzM3LAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJFbnRyeSI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMC4xNzFaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQxNTo1ODowMi4wMThaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAibmFtZSI6ICJIYXBweSBDYXQiLAogICAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgICAiY2hlZXpidXJnZXIiCiAgICAgICAgICBdLAogICAgICAgICAgImNvbG9yIjogImdyYXkiLAogICAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJiaXJ0aGRheSI6ICIyMDAzLTEwLTI4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAgICJsaXZlcyI6IDEsCiAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0sCiAgICAiQXNzZXQiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiTnlhbiBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzRncDZ0YUF3VzRDbVNndW1xMmVrVW0vOWRhMGNkMTkzNjg3MWI4ZDcyMzQzZTg5NWEwMGQ2MTEvTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiAxMjI3MywKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAyNTAsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMjUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0KICB9Cn0K", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.color%5Bne%5D=gray&content_type=cat" }, - "recorded_at" : 1502883774.569563, + "recorded_at" : 1507565689.222044, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -818,39 +302,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1109", - "Date" : "Wed, 16 Aug 2017 11:42:54 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"6b1522f34cbfc6d088b3da91b5ef9f65\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "9d140d14476bb39045ba2f443eaa264e", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883775.591443,VS0,VE161", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, - "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogMCwKICAibGltaXQiOiA1LAogICJpdGVtcyI6IFsKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI1RVRNUnprbDlLTTRvbXlNd0tBT2tpIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQyOjU3Ljc1MloiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxNC0wOC0yM1QxNDo0MjozNS4yMDdaIiwKICAgICAgICAicmV2aXNpb24iOiAzLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiMXQ5SWJjZmRDazZtMDR1SVNTc2FJSyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTG9uZG9uIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0wLjEyNTQ4NzE5OTk5OTk1MjI4LAogICAgICAgICAgImxhdCI6IDUxLjUwODUxNQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI2S250YVlYYUhTeUl3OE02ZW8yNk9LIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTExLTA2VDA5OjQ1OjI3LjQ3NVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQwOToxMzozNy44MDhaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiZG9nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJEb2dlIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAic3VjaCBqc29uXG53b3ciLAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiN3FWQmxDanBXRTg2T3NlbzQwZ0FFWSIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0MzozOC4yNThaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDQtMTVUMDg6MjI6MjIuMDEwWiIsCiAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIlNhbiBGcmFuY2lzY28iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTEyMi40MTk0MTU1MDAwMDAwMSwKICAgICAgICAgICJsYXQiOiAzNy43NzQ5Mjk1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdhcmZpZWxkIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjgyMVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOC0yN1QxMDowOTowNy45MjlaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJHYXJmaWVsZCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgImxhc2FnbmEiCiAgICAgICAgXSwKICAgICAgICAiY29sb3IiOiAib3JhbmdlIiwKICAgICAgICAiYmlydGhkYXkiOiAiMTk3OS0wNi0xOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgImxpZmVzIjogbnVsbCwKICAgICAgICAibGl2ZXMiOiA5CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiNE1VMXMzcG90aVVFTTJHNG9rWU9xdyIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0Mjo0NS45MjZaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NDUuOTI2WiIsCiAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogIjF0OUliY2ZkQ2s2bTA0dUlTU3NhSUsiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkJlcmxpbiIsCiAgICAgICAgImNlbnRlciI6IHsKICAgICAgICAgICJsb24iOiAxMy40MDQ5NTM5OTk5OTk5NzUsCiAgICAgICAgICAibGF0IjogNTIuNTIwMDA2NTk5OTk5OTkKICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJBc3NldCI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogIjF4MHhwWHU0cFNHUzRPdWtTeVdHVUsiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTExLTA2VDA5OjQ1OjEwLjAwMFoiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTEyLTE4VDEzOjI3OjE0LjkxN1oiLAogICAgICAgICAgInJldmlzaW9uIjogNiwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIkRvZ2UiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIm5pY2UgcGljdHVyZSIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvMXgweHBYdTRwU0dTNE91a1N5V0dVSy9jYzEyMzljNjM4NTQyOGVmMjZmNDE4MDE5MDUzMjgxOC9kb2dlLmpwZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogNTIyOTQzLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDU4MDAsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogNDM1MAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImRvZ2UuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfQp9Cg==", + "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogMCwKICAibGltaXQiOiA1LAogICJpdGVtcyI6IFsKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJnZTF4SHlIM1FPV3VjS1dDQ0FnSUciLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MjMuMjEwWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQzOjIzLjIxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJQYXJpcyIsCiAgICAgICAgImNlbnRlciI6IHsKICAgICAgICAgICJsb24iOiAyLjM1MjIyMTkwMDAwMDAxNzcsCiAgICAgICAgICAibGF0IjogNDguODU2NjE0CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjVFVE1SemtsOUtNNG9teU13S0FPa2kiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NTcuNzUyWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA4LTIzVDE0OjQyOjM1LjIwN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDMsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJMb25kb24iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTAuMTI1NDg3MTk5OTk5OTUyMjgsCiAgICAgICAgICAibGF0IjogNTEuNTA4NTE1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjdxVkJsQ2pwV0U4Nk9zZW80MGdBRVkiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MzguMjU4WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA0LTE1VDA4OjIyOjIyLjAxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsCiAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI0TVUxczNwb3RpVUVNMkc0b2tZT3F3IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQyOjQ1LjkyNloiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0Mjo0NS45MjZaIiwKICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiMXQ5SWJjZmRDazZtMDR1SVNTc2FJSyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiQmVybGluIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IDEzLjQwNDk1Mzk5OTk5OTk3NSwKICAgICAgICAgICJsYXQiOiA1Mi41MjAwMDY1OTk5OTk5OQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjE5LjUxM1oiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wNFQwOToxOTozOS4wMjdaIiwKICAgICAgICAicmV2aXNpb24iOiA1LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJOeWFuIENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgInJhaW5ib3dzIiwKICAgICAgICAgICJmaXNoIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogInJhaW5ib3ciLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDExLTA0LTA0VDIyOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxMzM3LAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLAogICJpbmNsdWRlcyI6IHsKICAgICJFbnRyeSI6IFsKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoyMC4xNzFaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQxNTo1ODowMi4wMThaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAibmFtZSI6ICJIYXBweSBDYXQiLAogICAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgICAiY2hlZXpidXJnZXIiCiAgICAgICAgICBdLAogICAgICAgICAgImNvbG9yIjogImdyYXkiLAogICAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJiaXJ0aGRheSI6ICIyMDAzLTEwLTI4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAgICJsaXZlcyI6IDEsCiAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0sCiAgICAiQXNzZXQiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjQwWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiTnlhbiBDYXQiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzRncDZ0YUF3VzRDbVNndW1xMmVrVW0vOWRhMGNkMTkzNjg3MWI4ZDcyMzQzZTg5NWEwMGQ2MTEvTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiAxMjI3MywKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAyNTAsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMjUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiTnlhbl9jYXRfMjUwcHhfZnJhbWUucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0KICB9Cn0K", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?limit=5" }, - "recorded_at" : 1502883774.776318, + "recorded_at" : 1507565689.253309, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -859,39 +317,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1034", - "Date" : "Wed, 16 Aug 2017 11:42:54 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"9707115047cc402819250f844939b2aa\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "34ed12b3afcccd19c8fcb781a22e93d4", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883775.803433,VS0,VE152", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiRW50cnkiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMTU6NTg6MDIuMDE4WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgIm5hbWUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgICAgXSwKICAgICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiYmlydGhkYXkiOiAiMjAwMy0xMC0yOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdLAogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI2N1oiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE1OjExOjI0LjM2MVoiLAogICAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIkhhcHB5IENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvM01aUG5qWlRJc2tBSUlrdXVvc0Nzcy8zODJhNDhkZmEyY2IxNmM0N2FhMmM3MmY3YjIzYmYwOS9oYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1OTkzOSwKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAyNzMsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMzk3CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9qcGVnIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIk55YW4gQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80Z3A2dGFBd1c0Q21TZ3VtcTJla1VtLzlkYTBjZDE5MzY4NzFiOGQ3MjM0M2U4OTVhMDBkNjExL055YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMTIyNzMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjUwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDI1MAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogIk55YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=cat&fields.likes%5Ball%5D=rainbows,fish" }, - "recorded_at" : 1502883774.976882, + "recorded_at" : 1507565689.3775549, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -900,38 +332,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Date" : "Wed, 16 Aug 2017 11:42:55 GMT", - "Content-Length" : "553", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "\"9c281df849250b22945cdefe5e4fc6d9\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "0b9b66cba10b631186344771d0cd9cf9", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883775.009286,VS0,VE126", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Cache-Control" : "max-age=0", - "Via" : "1.1 varnish" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgInRpdGxlIjogIkRvZ2UiCiAgICAgIH0sCiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIsCiAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0xMS0wNlQwOTo0NToxMC4wMDBaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6Mjc6MTQuOTE3WiIsCiAgICAgICAgInJldmlzaW9uIjogNiwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9CiAgICB9CiAgXQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/assets?sys.id=1x0xpXu4pSGS4OukSyWGUK&select=fields.title,sys" }, - "recorded_at" : 1502883775.138414, + "recorded_at" : 1507565689.5025601, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -940,39 +347,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "873", - "Date" : "Wed, 16 Aug 2017 11:42:55 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"db5cc71013f0ba6b6bb2aa4223b0ca2e\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "28f7292f4f8375444dea86412d485f9b", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883775.158451,VS0,VE152", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDIsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICIxeDB4cFh1NHBTR1M0T3VrU3lXR1VLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgIm5hbWUiOiAiRG9nZSIKICAgICAgfSwKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI2S250YVlYYUhTeUl3OE02ZW8yNk9LIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTExLTA2VDA5OjQ1OjI3LjQ3NVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQwOToxMzozNy44MDhaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiZG9nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogImpha2UiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibmFtZSI6ICJKYWtlIgogICAgICB9LAogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImpha2UiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjIuMDk2WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTEyLTE4VDEzOjEwOjI2LjIxMloiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJkb2ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiQXNzZXQiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICIxeDB4cFh1NHBTR1M0T3VrU3lXR1VLIiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0xMS0wNlQwOTo0NToxMC4wMDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMi0xOFQxMzoyNzoxNC45MTdaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDYsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJEb2dlIiwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJuaWNlIHBpY3R1cmUiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzF4MHhwWHU0cFNHUzRPdWtTeVdHVUsvY2MxMjM5YzYzODU0MjhlZjI2ZjQxODAxOTA1MzI4MTgvZG9nZS5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDUyMjk0MywKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiA1ODAwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDQzNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJkb2dlLmpwZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9qcGVnIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogImpha2UiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI2MFoiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE1OjIyOjM5LjQ2NloiLAogICAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIkpha2UiLAogICAgICAgICAgImZpbGUiOiB7CiAgICAgICAgICAgICJ1cmwiOiAiLy9pbWFnZXMuY29udGVudGZ1bC5jb20vY2ZleGFtcGxlYXBpLzRobHRlUUFYUzhpUzBZQ01VNlFNV2cvMmE0ZDgyNjE0NGYwMTQxMDkzNjRjY2Y1Yzg5MWQyZGQvamFrZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDIwNDgwLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDEwMCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAxNjEKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJqYWtlLnBuZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=dog&select=fields.image,fields.name,sys" }, - "recorded_at" : 1502883775.386404, + "recorded_at" : 1507565689.525408, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -981,39 +362,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "472", - "Date" : "Wed, 16 Aug 2017 11:42:55 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"723f6594280691fa448b1d0fc5dfd2a3\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "7192dcbe5c2d9e61dd8543d678f50f00", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883775.407898,VS0,VE160", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDMsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgImJlc3RGcmllbmQiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkVudHJ5IiwKICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImNvbG9yIjogInJhaW5ib3ciLAogICAgICAgICJuYW1lIjogIk55YW4gQ2F0IgogICAgICB9LAogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MTkuNTEzWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTA0VDA5OjE5OjM5LjAyN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9CiAgICB9LAogICAgewogICAgICAiZmllbGRzIjogewogICAgICAgICJjb2xvciI6ICJvcmFuZ2UiLAogICAgICAgICJuYW1lIjogIkdhcmZpZWxkIgogICAgICB9LAogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImdhcmZpZWxkIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjgyMVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOC0yN1QxMDowOTowNy45MjlaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAibmFtZSI6ICJIYXBweSBDYXQiCiAgICAgIH0sCiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTExLTE4VDE1OjU4OjAyLjAxOFoiLAogICAgICAgICJyZXZpc2lvbiI6IDgsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9CiAgICB9CiAgXQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?content_type=cat&select=fields.bestFriend,fields.color,fields.name,sys" }, - "recorded_at" : 1502883775.591984, + "recorded_at" : 1507565689.680366, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -1022,39 +377,28 @@ }, { "response" : { - "status" : 200, + "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogMCwKICAibGltaXQiOiAxMDAsCiAgIml0ZW1zIjogWwogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImhhcHB5Y2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIwLjE3MVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQxNTo1ODowMi4wMThaIiwKICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJIYXBweSBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJjaGVlemJ1cmdlciIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDAzLTEwLTI4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjVFVE1SemtsOUtNNG9teU13S0FPa2kiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDI6NTcuNzUyWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA4LTIzVDE0OjQyOjM1LjIwN1oiLAogICAgICAgICJyZXZpc2lvbiI6IDMsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJMb25kb24iLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogLTAuMTI1NDg3MTk5OTk5OTUyMjgsCiAgICAgICAgICAibGF0IjogNTEuNTA4NTE1CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjdxVkJsQ2pwV0U4Nk9zZW80MGdBRVkiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MzguMjU4WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA0LTE1VDA4OjIyOjIyLjAxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsCiAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI0TVUxczNwb3RpVUVNMkc0b2tZT3F3IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQyOjQ1LjkyNloiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0Mjo0NS45MjZaIiwKICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiMXQ5SWJjZmRDazZtMDR1SVNTc2FJSyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiQmVybGluIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IDEzLjQwNDk1Mzk5OTk5OTk3NSwKICAgICAgICAgICJsYXQiOiA1Mi41MjAwMDY1OTk5OTk5OQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjE5LjUxM1oiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wNFQwOToxOTozOS4wMjdaIiwKICAgICAgICAicmV2aXNpb24iOiA1LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiY2F0IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJOeWFuIENhdCIsCiAgICAgICAgImxpa2VzIjogWwogICAgICAgICAgInJhaW5ib3dzIiwKICAgICAgICAgICJmaXNoIgogICAgICAgIF0sCiAgICAgICAgImNvbG9yIjogInJhaW5ib3ciLAogICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJiaXJ0aGRheSI6ICIyMDExLTA0LTA0VDIyOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGl2ZXMiOiAxMzM3LAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAibnlhbmNhdCIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZ2UxeEh5SDNRT1d1Y0tXQ0NBZ0lHIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDE0LTAyLTIxVDEzOjQzOjIzLjIxMFoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxNC0wMi0yMVQxMzo0MzoyMy4yMTBaIiwKICAgICAgICAicmV2aXNpb24iOiAxLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiMXQ5SWJjZmRDazZtMDR1SVNTc2FJSyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiUGFyaXMiLAogICAgICAgICJjZW50ZXIiOiB7CiAgICAgICAgICAibG9uIjogMi4zNTIyMjE5MDAwMDAwMTc3LAogICAgICAgICAgImxhdCI6IDQ4Ljg1NjYxNAogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICI2S250YVlYYUhTeUl3OE02ZW8yNk9LIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTExLTA2VDA5OjQ1OjI3LjQ3NVoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0xMS0xOFQwOToxMzozNy44MDhaIiwKICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiZG9nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJEb2dlIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAic3VjaCBqc29uXG53b3ciLAogICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQXNzZXQiLAogICAgICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAiZ2FyZmllbGQiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuODIxWiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA4LTI3VDEwOjA5OjA3LjkyOVoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJjYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkdhcmZpZWxkIiwKICAgICAgICAibGlrZXMiOiBbCiAgICAgICAgICAibGFzYWduYSIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJvcmFuZ2UiLAogICAgICAgICJiaXJ0aGRheSI6ICIxOTc5LTA2LTE4VDIzOjAwOjAwKzAwOjAwIiwKICAgICAgICAibGlmZXMiOiBudWxsLAogICAgICAgICJsaXZlcyI6IDkKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgInN5cyI6IHsKICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpZCI6ICJmaW5uIiwKICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA2LTI3VDIyOjQ2OjIxLjQ1MFoiLAogICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wOVQxNjoxNTowMS4yOTdaIiwKICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICJjb250ZW50VHlwZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiQ29udGVudFR5cGUiLAogICAgICAgICAgICAiaWQiOiAiaHVtYW4iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkZpbm4iLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJGZWFybGVzcyBhZHZlbnR1cmVyISBEZWZlbmRlciBvZiBwYW5jYWtlcy4iLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJhZHZlbnR1cmUiCiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogImpha2UiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjIuMDk2WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTEyLTE4VDEzOjEwOjI2LjIxMloiLAogICAgICAgICJyZXZpc2lvbiI6IDUsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICJkb2ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICB9LAogICAgICAiZmllbGRzIjogewogICAgICAgICJuYW1lIjogIkpha2UiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJCYWNvbiBwYW5jYWtlcywgbWFraW4nIGJhY29uIHBhbmNha2VzISIsCiAgICAgICAgImltYWdlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICJpZCI6ICJqYWtlIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIF0sCiAgImluY2x1ZGVzIjogewogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiMXgweHBYdTRwU0dTNE91a1N5V0dVSyIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMTEtMDZUMDk6NDU6MTAuMDAwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTItMThUMTM6Mjc6MTQuOTE3WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA2LAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiRG9nZSIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAibmljZSBwaWN0dXJlIiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8xeDB4cFh1NHBTR1M0T3VrU3lXR1VLL2NjMTIzOWM2Mzg1NDI4ZWYyNmY0MTgwMTkwNTMyODE4L2RvZ2UuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1MjI5NDMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogNTgwMCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiA0MzUwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiZG9nZS5qcGciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvanBlZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjY3WiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MTE6MjQuMzYxWiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS8zTVpQbmpaVElza0FJSWt1dW9zQ3NzLzM4MmE0OGRmYTJjYjE2YzQ3YWEyYzcyZjdiMjNiZjA5L2hhcHB5Y2F0dy5qcGciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDU5OTM5LAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI3MywKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAzOTcKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJoYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL2pwZWciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiamFrZSIsCiAgICAgICAgICAidHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDktMDJUMTQ6NTY6MzQuMjYwWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDJUMTU6MjI6MzkuNDY2WiIsCiAgICAgICAgICAicmV2aXNpb24iOiAyLAogICAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgICB9LAogICAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgICAidGl0bGUiOiAiSmFrZSIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGhsdGVRQVhTOGlTMFlDTVU2UU1XZy8yYTRkODI2MTQ0ZjAxNDEwOTM2NGNjZjVjODkxZDJkZC9qYWtlLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMjA0ODAsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMTAwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDE2MQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogImpha2UucG5nIiwKICAgICAgICAgICAgImNvbnRlbnRUeXBlIjogImltYWdlL3BuZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJueWFuY2F0IiwKICAgICAgICAgICJ0eXBlIjogIkFzc2V0IiwKICAgICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJ1cGRhdGVkQXQiOiAiMjAxMy0wOS0wMlQxNDo1NjozNC4yNDBaIiwKICAgICAgICAgICJyZXZpc2lvbiI6IDEsCiAgICAgICAgICAibG9jYWxlIjogImVuLVVTIgogICAgICAgIH0sCiAgICAgICAgImZpZWxkcyI6IHsKICAgICAgICAgICJ0aXRsZSI6ICJOeWFuIENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvNGdwNnRhQXdXNENtU2d1bXEyZWtVbS85ZGEwY2QxOTM2ODcxYjhkNzIzNDNlODk1YTAwZDYxMS9OeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiZGV0YWlscyI6IHsKICAgICAgICAgICAgICAic2l6ZSI6IDEyMjczLAogICAgICAgICAgICAgICJpbWFnZSI6IHsKICAgICAgICAgICAgICAgICJ3aWR0aCI6IDI1MCwKICAgICAgICAgICAgICAgICJoZWlnaHQiOiAyNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlTmFtZSI6ICJOeWFuX2NhdF8yNTBweF9mcmFtZS5wbmciLAogICAgICAgICAgICAiY29udGVudFR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXQogIH0KfQo=", + "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries" + }, + "recorded_at" : 1507565689.7069321, + "request" : { "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1034", - "Date" : "Wed, 16 Aug 2017 11:42:55 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"9707115047cc402819250f844939b2aa\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "03b0d5d68627847a043391a72a9e340f", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883776.617545,VS0,VE182", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", + "Authorization" : "Bearer b4c0n73n7fu1" }, + "method" : "GET", + "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries" + } + }, + { + "response" : { "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiRW50cnkiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMTU6NTg6MDIuMDE4WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgIm5hbWUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgICAgXSwKICAgICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiYmlydGhkYXkiOiAiMjAwMy0xMC0yOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdLAogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI2N1oiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE1OjExOjI0LjM2MVoiLAogICAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIkhhcHB5IENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvM01aUG5qWlRJc2tBSUlrdXVvc0Nzcy8zODJhNDhkZmEyY2IxNmM0N2FhMmM3MmY3YjIzYmYwOS9oYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1OTkzOSwKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAyNzMsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMzk3CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9qcGVnIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIk55YW4gQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80Z3A2dGFBd1c0Q21TZ3VtcTJla1VtLzlkYTBjZDE5MzY4NzFiOGQ3MjM0M2U4OTVhMDBkNjExL055YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMTIyNzMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjUwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDI1MAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogIk55YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.bestFriend.sys.contentType.sys.id=cat&content_type=cat&fields.bestFriend.fields.name%5Bmatch%5D=Happy%20Cat" }, - "recorded_at" : 1502883775.893561, + "recorded_at" : 1507565689.7450399, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -1063,38 +407,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Date" : "Wed, 16 Aug 2017 11:42:56 GMT", - "Content-Length" : "836", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "\"c36258a702467cb9c29510c8d13b44ba\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "0", - "X-Cache" : "MISS", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "790c53d184c4d2229e4cb04b1160ec33", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883776.918051,VS0,VE129", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Cache-Control" : "max-age=0", - "Via" : "1.1 varnish" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEwLAogICJza2lwIjogOSwKICAibGltaXQiOiAxMDAsCiAgIml0ZW1zIjogWwogICAgewogICAgICAic3lzIjogewogICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImlkIjogIjdxVkJsQ2pwV0U4Nk9zZW80MGdBRVkiLAogICAgICAgICJ0eXBlIjogIkVudHJ5IiwKICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTQtMDItMjFUMTM6NDM6MzguMjU4WiIsCiAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDE0LTA0LTE1VDA4OjIyOjIyLjAxMFoiLAogICAgICAgICJyZXZpc2lvbiI6IDIsCiAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICJpZCI6ICIxdDlJYmNmZENrNm0wNHVJU1NzYUlLIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImxvY2FsZSI6ICJlbi1VUyIKICAgICAgfSwKICAgICAgImZpZWxkcyI6IHsKICAgICAgICAibmFtZSI6ICJTYW4gRnJhbmNpc2NvIiwKICAgICAgICAiY2VudGVyIjogewogICAgICAgICAgImxvbiI6IC0xMjIuNDE5NDE1NTAwMDAwMDEsCiAgICAgICAgICAibGF0IjogMzcuNzc0OTI5NQogICAgICAgIH0KICAgICAgfQogICAgfQogIF0KfQo=", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?skip=9&order=sys.createdAt" }, - "recorded_at" : 1502883776.050778, + "recorded_at" : 1507565689.7709329, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", @@ -1103,39 +422,13 @@ }, { "response" : { - "status" : 200, - "headers" : { - "Via" : "1.1 varnish", - "Content-Length" : "1034", - "Date" : "Wed, 16 Aug 2017 11:42:56 GMT", - "Age" : "0", - "Access-Control-Expose-Headers" : "Etag", - "Access-Control-Max-Age" : "86400", - "Etag" : "W\/\"9707115047cc402819250f844939b2aa\"", - "Access-Control-Allow-Headers" : "Accept,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Range,Content-Type,DNT,Destination,Expires,If-Match,If-Modified-Since,If-None-Match,Keep-Alive,Last-Modified,Origin,Pragma,Range,User-Agent,X-Http-Method-Override,X-Mx-ReqToken,X-Requested-With,X-Contentful-Version,X-Contentful-Content-Type,X-Contentful-Organization,X-Contentful-Skip-Transformation,X-Contentful-User-Agent,X-Contentful-Enable-Experimental-Feature", - "Accept-Ranges" : "bytes", - "Vary" : "Accept-Encoding", - "X-Cache-Hits" : "1", - "X-Cache" : "HIT", - "Content-Type" : "application\/vnd.contentful.delivery.v1+json", - "Access-Control-Allow-Methods" : "GET,HEAD,OPTIONS", - "Connection" : "keep-alive", - "X-Contentful-Request-Id" : "03b0d5d68627847a043391a72a9e340f", - "X-Content-Type-Options" : "nosniff", - "X-Timer" : "S1502883776.071101,VS0,VE0", - "X-Served-By" : "cache-hhn1545-HHN", - "Access-Control-Allow-Origin" : "*", - "Server" : "Contentful", - "Content-Encoding" : "gzip", - "Cache-Control" : "max-age=0" - }, "body" : "ewogICJzeXMiOiB7CiAgICAidHlwZSI6ICJBcnJheSIKICB9LAogICJ0b3RhbCI6IDEsCiAgInNraXAiOiAwLAogICJsaW1pdCI6IDEwMCwKICAiaXRlbXMiOiBbCiAgICB7CiAgICAgICJzeXMiOiB7CiAgICAgICAgInNwYWNlIjogewogICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaWQiOiAibnlhbmNhdCIsCiAgICAgICAgInR5cGUiOiAiRW50cnkiLAogICAgICAgICJjcmVhdGVkQXQiOiAiMjAxMy0wNi0yN1QyMjo0NjoxOS41MTNaIiwKICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMDktMDRUMDk6MTk6MzkuMDI3WiIsCiAgICAgICAgInJldmlzaW9uIjogNSwKICAgICAgICAiY29udGVudFR5cGUiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkNvbnRlbnRUeXBlIiwKICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgIH0sCiAgICAgICJmaWVsZHMiOiB7CiAgICAgICAgIm5hbWUiOiAiTnlhbiBDYXQiLAogICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICJyYWluYm93cyIsCiAgICAgICAgICAiZmlzaCIKICAgICAgICBdLAogICAgICAgICJjb2xvciI6ICJyYWluYm93IiwKICAgICAgICAiYmVzdEZyaWVuZCI6IHsKICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAibGlua1R5cGUiOiAiRW50cnkiLAogICAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYmlydGhkYXkiOiAiMjAxMS0wNC0wNFQyMjowMDowMCswMDowMCIsCiAgICAgICAgImxpdmVzIjogMTMzNywKICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgImxpbmtUeXBlIjogIkFzc2V0IiwKICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwKICAiaW5jbHVkZXMiOiB7CiAgICAiRW50cnkiOiBbCiAgICAgIHsKICAgICAgICAic3lzIjogewogICAgICAgICAgInNwYWNlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgImlkIjogImNmZXhhbXBsZWFwaSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpZCI6ICJoYXBweWNhdCIsCiAgICAgICAgICAidHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAiY3JlYXRlZEF0IjogIjIwMTMtMDYtMjdUMjI6NDY6MjAuMTcxWiIsCiAgICAgICAgICAidXBkYXRlZEF0IjogIjIwMTMtMTEtMThUMTU6NTg6MDIuMDE4WiIsCiAgICAgICAgICAicmV2aXNpb24iOiA4LAogICAgICAgICAgImNvbnRlbnRUeXBlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJDb250ZW50VHlwZSIsCiAgICAgICAgICAgICAgImlkIjogImNhdCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgIm5hbWUiOiAiSGFwcHkgQ2F0IiwKICAgICAgICAgICJsaWtlcyI6IFsKICAgICAgICAgICAgImNoZWV6YnVyZ2VyIgogICAgICAgICAgXSwKICAgICAgICAgICJjb2xvciI6ICJncmF5IiwKICAgICAgICAgICJiZXN0RnJpZW5kIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJFbnRyeSIsCiAgICAgICAgICAgICAgImlkIjogIm55YW5jYXQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiYmlydGhkYXkiOiAiMjAwMy0xMC0yOFQyMzowMDowMCswMDowMCIsCiAgICAgICAgICAibGl2ZXMiOiAxLAogICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAic3lzIjogewogICAgICAgICAgICAgICJ0eXBlIjogIkxpbmsiLAogICAgICAgICAgICAgICJsaW5rVHlwZSI6ICJBc3NldCIsCiAgICAgICAgICAgICAgImlkIjogImhhcHB5Y2F0IgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdLAogICAgIkFzc2V0IjogWwogICAgICB7CiAgICAgICAgInN5cyI6IHsKICAgICAgICAgICJzcGFjZSI6IHsKICAgICAgICAgICAgInN5cyI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJMaW5rIiwKICAgICAgICAgICAgICAibGlua1R5cGUiOiAiU3BhY2UiLAogICAgICAgICAgICAgICJpZCI6ICJjZmV4YW1wbGVhcGkiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiaWQiOiAiaGFwcHljYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI2N1oiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE1OjExOjI0LjM2MVoiLAogICAgICAgICAgInJldmlzaW9uIjogMiwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIkhhcHB5IENhdCIsCiAgICAgICAgICAiZmlsZSI6IHsKICAgICAgICAgICAgInVybCI6ICIvL2ltYWdlcy5jb250ZW50ZnVsLmNvbS9jZmV4YW1wbGVhcGkvM01aUG5qWlRJc2tBSUlrdXVvc0Nzcy8zODJhNDhkZmEyY2IxNmM0N2FhMmM3MmY3YjIzYmYwOS9oYXBweWNhdHcuanBnIiwKICAgICAgICAgICAgImRldGFpbHMiOiB7CiAgICAgICAgICAgICAgInNpemUiOiA1OTkzOSwKICAgICAgICAgICAgICAiaW1hZ2UiOiB7CiAgICAgICAgICAgICAgICAid2lkdGgiOiAyNzMsCiAgICAgICAgICAgICAgICAiaGVpZ2h0IjogMzk3CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZU5hbWUiOiAiaGFwcHljYXR3LmpwZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9qcGVnIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgICJzeXMiOiB7CiAgICAgICAgICAic3BhY2UiOiB7CiAgICAgICAgICAgICJzeXMiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiTGluayIsCiAgICAgICAgICAgICAgImxpbmtUeXBlIjogIlNwYWNlIiwKICAgICAgICAgICAgICAiaWQiOiAiY2ZleGFtcGxlYXBpIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlkIjogIm55YW5jYXQiLAogICAgICAgICAgInR5cGUiOiAiQXNzZXQiLAogICAgICAgICAgImNyZWF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInVwZGF0ZWRBdCI6ICIyMDEzLTA5LTAyVDE0OjU2OjM0LjI0MFoiLAogICAgICAgICAgInJldmlzaW9uIjogMSwKICAgICAgICAgICJsb2NhbGUiOiAiZW4tVVMiCiAgICAgICAgfSwKICAgICAgICAiZmllbGRzIjogewogICAgICAgICAgInRpdGxlIjogIk55YW4gQ2F0IiwKICAgICAgICAgICJmaWxlIjogewogICAgICAgICAgICAidXJsIjogIi8vaW1hZ2VzLmNvbnRlbnRmdWwuY29tL2NmZXhhbXBsZWFwaS80Z3A2dGFBd1c0Q21TZ3VtcTJla1VtLzlkYTBjZDE5MzY4NzFiOGQ3MjM0M2U4OTVhMDBkNjExL055YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJkZXRhaWxzIjogewogICAgICAgICAgICAgICJzaXplIjogMTIyNzMsCiAgICAgICAgICAgICAgImltYWdlIjogewogICAgICAgICAgICAgICAgIndpZHRoIjogMjUwLAogICAgICAgICAgICAgICAgImhlaWdodCI6IDI1MAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVOYW1lIjogIk55YW5fY2F0XzI1MHB4X2ZyYW1lLnBuZyIsCiAgICAgICAgICAgICJjb250ZW50VHlwZSI6ICJpbWFnZS9wbmciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICBdCiAgfQp9Cg==", "url" : "https:\/\/cdn.contentful.com\/spaces\/cfexampleapi\/entries?fields.bestFriend.sys.contentType.sys.id=cat&content_type=cat&fields.bestFriend.fields.name%5Bmatch%5D=Happy%20Cat" }, - "recorded_at" : 1502883776.073538, + "recorded_at" : 1507565689.794241, "request" : { "headers" : { - "X-Contentful-User-Agent" : "sdk contentful.swift\/0.9.2; platform Swift\/3.1; os macOS\/10.12.6;", + "X-Contentful-User-Agent" : "sdk contentful.swift\/0.10.2; platform Swift\/3.1; os macOS\/10.13.0;", "Authorization" : "Bearer b4c0n73n7fu1" }, "method" : "GET", diff --git a/Tests/ContentfulTests/QueryTests.swift b/Tests/ContentfulTests/QueryTests.swift index db27ffd8..15063550 100644 --- a/Tests/ContentfulTests/QueryTests.swift +++ b/Tests/ContentfulTests/QueryTests.swift @@ -10,14 +10,13 @@ import XCTest import Nimble import DVR -import CoreData +import Interstellar -final class Cat: EntryModellable { +final class Cat: EntryDecodable { static let contentTypeId: String = "cat" - let id: String - let localeCode: String + let sys: Sys let color: String? let name: String? let lives: Int? @@ -26,62 +25,108 @@ final class Cat: EntryModellable { // Relationship fields. var bestFriend: Cat? - init(entry: Entry) { - self.id = entry.id - self.localeCode = entry.localeCode + public required init(from decoder: Decoder) throws { + sys = try decoder.sys() + let fields = try decoder.contentfulFieldsContainer(keyedBy: CodingKeys.self) - self.name = entry.fields.string(at: "name") - self.color = entry.fields["color"] as? String - self.likes = entry.fields["likes"] as? [String] - self.lives = entry.fields["lives"] as? Int - } + self.name = try fields.decodeIfPresent(String.self, forKey: .name) + self.color = try fields.decodeIfPresent(String.self, forKey: .color) + self.likes = try fields.decodeIfPresent(Array.self, forKey: .likes) + self.lives = try fields.decodeIfPresent(Int.self, forKey: .lives) - func populateLinks(from cache: [FieldName: Any]) { - self.bestFriend = cache["bestFriend"] as? Cat + try fields.resolveLink(forKey: .bestFriend, inLocale: sys.locale!, decoder: decoder) { [weak self] linkedCat in + self?.bestFriend = linkedCat as? Cat + } } -} - -final class City: EntryModellable { - - init(entry: Entry) { - self.id = entry.id - self.localeCode = entry.localeCode - self.location = Location(latitude: 1, longitude: 1) + + private enum CodingKeys: String, CodingKey { + case sys, name, color, likes, lives, bestFriend } +} - func populateLinks(from cache: [FieldName : Any]) {} +final class City: EntryDecodable { static let contentTypeId: String = "1t9IbcfdCk6m04uISSsaIK" - var id: String - var localeCode: String + let sys: Sys var location: Location? + + public required init(from decoder: Decoder) throws { + sys = try decoder.sys() + let fields = try decoder.contentfulFieldsContainer(keyedBy: CodingKeys.self) + + self.location = try fields.decode(Location.self, forKey: .location) + } + + private enum CodingKeys: String, CodingKey { + case location = "center" + } } -final class Dog: EntryModellable { +final class Dog: EntryDecodable { static let contentTypeId: String = "dog" - init(entry: Entry) { - self.id = entry.id - self.localeCode = entry.localeCode - self.name = entry.fields["name"] as? String + let sys: Sys + let name: String! + let description: String? + var image: Asset? + + public required init(from decoder: Decoder) throws { + sys = try decoder.sys() + let fields = try decoder.contentfulFieldsContainer(keyedBy: CodingKeys.self) + name = try fields.decode(String.self, forKey: .name) + description = try fields.decodeIfPresent(String.self, forKey: .description) + + try fields.resolveLink(forKey: .image, inLocale: sys.locale!, decoder: decoder) { [weak self] linkedImage in + self?.image = linkedImage as? Asset + } } - func populateLinks(from cache: [FieldName : Any]) { - self.image = cache["image"] as? Asset + private enum CodingKeys: String, CodingKey { + case image, name, description } +} + +class Human: EntryDecodable { - let id: String - let localeCode: String + static let contentTypeId = "human" + + let sys: Sys let name: String? + let description: String? + let likes: [String]? var image: Asset? + + public required init(from decoder: Decoder) throws { + sys = try decoder.sys() + let fields = try decoder.contentfulFieldsContainer(keyedBy: CodingKeys.self) + name = try fields.decode(String.self, forKey: .name) + description = try fields.decode(String.self, forKey: .description) + likes = try fields.decode(Array.self, forKey: .likes) + + try fields.resolveLink(forKey: .image, inLocale: sys.locale!, decoder: decoder) { [weak self] linkedImage in + self?.image = linkedImage as? Asset + } + } + + private enum CodingKeys: String, CodingKey { + case name, description, likes, image + } } class QueryTests: XCTestCase { - static let client = TestClientFactory.testClient(withCassetteNamed: "QueryTests", contentModel: ContentModel(entryTypes: [Cat.self, City.self, Dog.self])) + static let client: Client = { + let contentTypeClasses: [EntryDecodable.Type] = [ + Cat.self, + Dog.self, + City.self, + Human.self + ] + return TestClientFactory.testClient(withCassetteNamed: "QueryTests", contentTypeClasses: contentTypeClasses) + }() override class func setUp() { super.setUp() @@ -123,8 +168,8 @@ class QueryTests: XCTestCase { // Test uniqueness in memory. expect(nyanCat).to(be(nyanCat.bestFriend?.bestFriend)) - case .error: - fail("Should not throw an error") + case .error(let error): + fail("Should not throw an error \(error)") } expectation.fulfill() } @@ -132,6 +177,39 @@ class QueryTests: XCTestCase { waitForExpectations(timeout: 10.0, handler: nil) } + func testQueryReturningHeterogeneousArray() { + + let expectation = self.expectation(description: "Fetch all entries expectation") + + // Empty query means: get all entries. i.e. /entries + QueryTests.client.fetchMappedEntries(with: Query()) { (result: Result) in + + switch result { + case .success(let response): + let entries = response.items + expect(entries.count).to(equal(10)) + + if let cat = entries.first as? Cat, let bestFriend = cat.bestFriend { + expect(bestFriend.name).to(equal("Nyan Cat")) + } else { + fail("The first entry in the heterogenous array should be a cat wiht a best friend named 'Nyan Cat'") + } + + if let dog = entries.last as? Dog, let image = dog.image { + expect(dog.description).to(equal("Bacon pancakes, makin' bacon pancakes!")) + expect(image.id).to(equal("jake")) + } else { + fail("The last entry in the heterogenous array should be a dog with an image with named 'jake'") + } + + case .error(let error): + fail("Should not throw an error \(error)") + } + expectation.fulfill() + } + waitForExpectations(timeout: 10.0, handler: nil) + } + func testQueryClientDefinedModelResolvesIncludes() { let selections = ["fields.image", "fields.name"] @@ -139,7 +217,7 @@ class QueryTests: XCTestCase { let query = try! QueryOn(selectingFieldsNamed: selections) - QueryTests.client.fetchMappedEntries(with: query) { result in + QueryTests.client.fetchMappedEntries(with: query) { (result: Result>) in switch result { case .success(let dogsResponse): @@ -180,13 +258,14 @@ class QueryTests: XCTestCase { waitForExpectations(timeout: 10.0, handler: nil) } + func testEqualityQuery() { let expectation = self.expectation(description: "Equality operator expectation") let query = QueryOn(where: "fields.color", .equals("gray")) - QueryTests.client.fetchMappedEntries(with: query) { result in + QueryTests.client.fetchMappedEntries(with: query) { (result: Result>) in switch result { case .success(let catsResponse): let cats = catsResponse.items @@ -213,8 +292,8 @@ class QueryTests: XCTestCase { let cats = catsResponse.items expect(cats.count).to(beGreaterThan(0)) expect(cats.first?.color).toNot(equal("gray")) - case .error: - fail("Should not throw an error") + case .error(let error): + fail("Should not throw an error \(error)") } expectation.fulfill() } @@ -237,8 +316,8 @@ class QueryTests: XCTestCase { expect(cats.first?.likes).to(contain("rainbows")) expect(cats.first?.likes).to(contain("fish")) - case .error: - fail("Should not throw an error") + case .error(let error): + fail("Should not throw an error \(error)") } expectation.fulfill() } @@ -262,10 +341,8 @@ class QueryTests: XCTestCase { expect(happyCat.likes?.count).to(equal(1)) expect(happyCat.likes).to(contain("cheezburger")) } - - - case .error: - fail("Should not throw an error") + case .error(let error): + fail("Should not throw an error \(error)") } expectation.fulfill() } @@ -288,8 +365,8 @@ class QueryTests: XCTestCase { expect(cats.first?.likes).to(contain("rainbows")) expect(cats.first?.likes).to(contain("fish")) - case .error: - fail("Should not throw an error") + case .error(let error): + fail("Should not throw an error \(error)") } expectation.fulfill() } @@ -308,8 +385,8 @@ class QueryTests: XCTestCase { let cats = catsResponse.items expect(cats.count).to(beGreaterThan(0)) expect(cats.first?.color).toNot(equal("gray")) - case .error: - fail("Should not throw an error") + case .error(let error): + fail("Should not throw an error \(error)") } expectation.fulfill() } @@ -692,12 +769,12 @@ class QueryTests: XCTestCase { } // MARK: - Asset mimetype - + func testFilterAssetsByMIMETypeGroup() { let expectation = self.expectation(description: "Fetch image from asset network expectation") - + let query = AssetQuery(whereMimetypeGroupIs: .image) - + QueryTests.client.fetchAssets(with: query) { result in switch result { case .success(let assetsResponse): @@ -708,7 +785,98 @@ class QueryTests: XCTestCase { } expectation.fulfill() } - + waitForExpectations(timeout: 10.0, handler: nil) } } + +// From Complex-Sync-Test-Space +class LinkClass: EntryDecodable { + + static let contentTypeId = "link" + + let sys: Sys + let awesomeLinkTitle: String? + + public required init(from decoder: Decoder) throws { + sys = try decoder.sys() + let fields = try decoder.contentfulFieldsContainer(keyedBy: CodingKeys.self) + awesomeLinkTitle = try fields.decodeIfPresent(String.self, forKey: .awesomeLinkTitle) + } + + private enum CodingKeys: String, CodingKey { + case awesomeLinkTitle + } +} + + +class SingleRecord: EntryDecodable { + + static let contentTypeId = "singleRecord" + + let sys: Sys + let textBody: String? + var arrayLinkField: [LinkClass]? + + public required init(from decoder: Decoder) throws { + sys = try decoder.sys() + let fields = try decoder.contentfulFieldsContainer(keyedBy: CodingKeys.self) + textBody = try fields.decodeIfPresent(String.self, forKey: .textBody) + try fields.resolveLinksArray(forKey: .arrayLinkField, inLocale: sys.locale!, decoder: decoder) { [weak self] arrayOfLinks in + self?.arrayLinkField = arrayOfLinks as? [LinkClass] + } + } + + private enum CodingKeys: String, CodingKey { + case textBody, arrayLinkField + } +} + +class LinkResolverTests: XCTestCase { + static let client: Client = { + let contentTypeClasses: [EntryDecodable.Type] = [SingleRecord.self, LinkClass.self] + return TestClientFactory.testClient(withCassetteNamed: "LinkResolverTests", + spaceId: "smf0sqiu0c5s", + accessToken: "14d305ad526d4487e21a99b5b9313a8877ce6fbf540f02b12189eea61550ef34", + contentTypeClasses: contentTypeClasses) + }() + + override class func setUp() { + super.setUp() + (client.urlSession as? DVR.Session)?.beginRecording() + } + + override class func tearDown() { + super.tearDown() + (client.urlSession as? DVR.Session)?.endRecording() + } + + func testDecoderCanResolveArrayOfLinks() { + + let expectation = self.expectation(description: "CanResolveArrayOfLinksTests") + + let query = QueryOn(where: "sys.id", .equals("7BwFiM0nxCS4EGYaIAIkyU")) + LinkResolverTests.client.fetchMappedEntries(with: query) { result in + + switch result { + case .success(let arrayResponse): + let records = arrayResponse.items + expect(records.count).to(equal(1)) + if let singleRecord = records.first { + expect(singleRecord.arrayLinkField).toNot(beNil()) + expect(singleRecord.arrayLinkField?.count).to(equal(2)) + expect(singleRecord.arrayLinkField?.first?.awesomeLinkTitle).to(equal("AWESOMELINK!!!")) + expect(singleRecord.arrayLinkField?[1].awesomeLinkTitle).to(equal("The second link")) + } else { + fail("There shoudl be at least one entry in the array of records") + } + case .error(let error): + fail("Should not throw an error \(error)") + } + + expectation.fulfill() + } + self.waitForExpectations(timeout: 10.0, handler: nil) + } +} +