Files
amiibo-service/docs/data/documentation/amiiboservice.json
T
javier 2b01ec14bf Overall improvements and data update (#22)
This PR contains the work done to update the live tests to the latest data plus lots of QoL improvements to the library, including:

* added test cases to test the ``AmiiboService` locally;
* conformed the models to the `Hashable` protocol;
* documented the use of caching with the `AmiiboService` service;
* updated the reference to the new AmiiboAPI url;
* updated the year on the copyrights and header files;
* updated the overall documentation of the source code and the package.

Reviewed-on: #22
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
2026-03-22 23:39:48 +00:00

1 line
19 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"kind":"symbol","schemaVersion":{"major":0,"patch":0,"minor":3},"abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"type":"strong","inlineContent":[{"text":"Amiibo API","type":"text"}]},{"type":"text","text":" backend service."}],"primaryContentSections":[{"content":[{"type":"heading","text":"Overview","level":2,"anchor":"Overview"},{"inlineContent":[{"text":"The ","type":"text"},{"type":"codeVoice","code":"amiibo-service"},{"type":"text","text":" library is a package that allows the developer to interact with the "},{"isActive":true,"identifier":"https:\/\/www.amiiboapi.org","type":"reference"},{"text":" backend service seamlessly, by not only providing the ","type":"text"},{"type":"emphasis","inlineContent":[{"text":"service","type":"text"}]},{"type":"text","text":" type but also any possible "},{"type":"emphasis","inlineContent":[{"type":"text","text":"models"}]},{"type":"text","text":", "},{"type":"emphasis","inlineContent":[{"type":"text","text":"filters"}]},{"type":"text","text":", "},{"type":"emphasis","inlineContent":[{"type":"text","text":"errors"}]},{"type":"text","text":" and "},{"type":"emphasis","inlineContent":[{"type":"text","text":"interfaces"}]},{"type":"text","text":" types that might be needed during implementation."}],"type":"paragraph"},{"anchor":"Design","level":2,"type":"heading","text":"Design"},{"inlineContent":[{"type":"text","text":"Although it could have been possible to generate a one-to-one RESTful client based on the Open API specification document that describe the available endpoints of the backend service, it was decided to design a "},{"type":"codeVoice","code":"AmiiboService"},{"type":"text","text":" service type that removes the complexities of the API design imposed by the backend service, and provides the developer with a simple interface, and a seamless experience."}],"type":"paragraph"},{"anchor":"Installation","level":2,"type":"heading","text":"Installation"},{"inlineContent":[{"type":"text","text":"To use the "},{"type":"codeVoice","code":"AmiiboService"},{"type":"text","text":" library with your package, then add it as a dependency in the "},{"type":"codeVoice","code":"Package.swift"},{"type":"text","text":" file:"}],"type":"paragraph"},{"code":["let package = Package("," \/\/ name, platforms, products, etc."," dependencies: ["," .package(url: \"https:\/\/github.com\/rock-n-code\/amiibo-service\", from: \"1.4.0\"),"," \/\/ other dependencies"," ],"," targets: ["," .target("," name: \"SomeTarget\", "," dependencies: ["," .product(name: \"AmiiboService\", package: \"amiibo-service\"),"," ]"," )"," \/\/ other targets"," ]",")"],"type":"codeListing","syntax":"swift"},{"inlineContent":[{"type":"text","text":"It is also possible to use the "},{"type":"codeVoice","code":"AmiiboService"},{"type":"text","text":" library with your app in Xcode, then add it as a dependency in your Xcode project."}],"type":"paragraph"},{"style":"important","name":"Important","type":"aside","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Swift 5.10 or higher is required in order to compile this library."}]}]},{"anchor":"Caching","level":2,"type":"heading","text":"Caching"},{"inlineContent":[{"type":"text","text":"The "},{"identifier":"https:\/\/www.amiiboapi.org","overridingTitleInlineContent":[{"type":"text","text":"Amiibo API"}],"type":"reference","isActive":true,"overridingTitle":"Amiibo API"},{"type":"text","text":" recommends that consumers who call the API regularly implement caching on their systems. This library does not include a built-in cache, leaving the choice of caching strategy to the consumer. The following examples show two common approaches."}],"type":"paragraph"},{"anchor":"URLCache-on-the-transport-layer","level":3,"type":"heading","text":"URLCache on the transport layer"},{"inlineContent":[{"type":"text","text":"Pass a custom "},{"type":"codeVoice","code":"URLSessionTransport"},{"type":"text","text":" with a cache-configured "},{"type":"codeVoice","code":"URLSession"},{"type":"text","text":" to "},{"type":"reference","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboLiveClient","isActive":true},{"type":"text","text":":"}],"type":"paragraph"},{"type":"codeListing","syntax":"swift","code":["import OpenAPIURLSession","","let configuration = URLSessionConfiguration.default","","configuration.urlCache = URLCache("," memoryCapacity: 5_000_000,"," diskCapacity: 50_000_000",")","","let transport = URLSessionTransport("," configuration: .init("," session: URLSession(configuration: configuration)"," )",")","","let service = AmiiboService("," client: AmiiboLiveClient(transport: transport)",")"]},{"type":"paragraph","inlineContent":[{"text":"This leverages HTTP cache headers from the server and persists cached responses to disk.","type":"text"}]},{"type":"heading","anchor":"Application-level-caching","level":3,"text":"Application-level caching"},{"type":"paragraph","inlineContent":[{"text":"Alternatively, cache the results returned by ","type":"text"},{"isActive":true,"type":"reference","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService"},{"text":" directly in your application using any storage mechanism that fits your needs, such as an in-memory dictionary, a database, or a file-based store.","type":"text"}]},{"type":"heading","anchor":"Testing","level":2,"text":"Testing"},{"type":"paragraph","inlineContent":[{"text":"The ","type":"text"},{"isActive":true,"type":"reference","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"},{"text":" protocol enables creating custom mock clients for testing, eliminating the need for network calls in unit tests. Conform to ","type":"text"},{"isActive":true,"type":"reference","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"},{"text":" and return stubbed data or throw ","type":"text"},{"isActive":true,"type":"reference","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError"},{"text":" errors to verify your applications behavior:","type":"text"}]},{"type":"codeListing","syntax":"swift","code":["import AmiiboService","","struct MyMockClient: AmiiboClient {"," var error: AmiiboServiceError?",""," func getAmiibos("," by filter: AmiiboFilter"," ) async throws(AmiiboServiceError) -> [Amiibo] {"," if let error { throw error }"," return []"," }",""," \/\/ Implement remaining protocol requirements...","}","","let service = AmiiboService(client: MyMockClient())"]},{"inlineContent":[{"type":"text","text":"Inject the mock client into "},{"type":"reference","isActive":true,"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService"},{"type":"text","text":" via its "},{"type":"reference","isActive":true,"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService\/init(client:)"},{"type":"text","text":" initializer to test how your code handles empty results, specific errors, or any other scenario without relying on the live backend."}],"type":"paragraph"},{"level":2,"text":"Tasks","type":"heading","anchor":"Tasks"},{"inlineContent":[{"type":"text","text":"This library offers a set of ready-to-use tasks that simplify the interaction with the library, which the developer can use from any "},{"type":"codeVoice","code":"Terminal"},{"type":"text","text":" application."}],"type":"paragraph"},{"style":"tip","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"To show the available list of tasks, plus display some explanations about each and every one of them; please enter the following command:"}]}],"name":"Tip","type":"aside"},{"type":"codeListing","syntax":"bash","code":["$ make"]}],"kind":"content"}],"hierarchy":{"paths":[[]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/AmiiboService\/documentation\/AmiiboService"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/amiiboservice"]}],"topicSections":[{"title":"Service","anchor":"Service","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService"]},{"title":"Clients","anchor":"Clients","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboLiveClient"]},{"title":"Models","anchor":"Models","identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeries","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboType","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeries"]},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeriesFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboTypeFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacterFilter","doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeriesFilter"],"anchor":"Filters","title":"Filters"},{"identifiers":["doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError"],"title":"Errors","anchor":"Errors"}],"metadata":{"externalID":"AmiiboService","modules":[{"name":"AmiiboService"}],"title":"AmiiboService","role":"collection","roleHeading":"Framework","symbolKind":"module"},"sections":[],"references":{"doc://AmiiboService/documentation/AmiiboService/AmiiboSeriesFilter":{"kind":"symbol","url":"\/documentation\/amiiboservice\/amiiboseriesfilter","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboSeriesFilter"}],"navigatorTitle":[{"kind":"identifier","text":"AmiiboSeriesFilter"}],"role":"symbol","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeriesFilter","abstract":[{"type":"text","text":"A type that contains values to fine-tune a response when requesting amiibo series."}],"title":"AmiiboSeriesFilter"},"https://www.amiiboapi.org":{"identifier":"https:\/\/www.amiiboapi.org","titleInlineContent":[{"text":"Amiibo API","type":"text"}],"type":"link","url":"https:\/\/www.amiiboapi.org","title":"Amiibo API"},"doc://AmiiboService/documentation/AmiiboService/AmiiboSeries":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AmiiboSeries"}],"title":"AmiiboSeries","navigatorTitle":[{"kind":"identifier","text":"AmiiboSeries"}],"abstract":[{"type":"text","text":"A model that represents an amiibo series."}],"role":"symbol","kind":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiiboseries","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboSeries"},"doc://AmiiboService/documentation/AmiiboService":{"kind":"symbol","url":"\/documentation\/amiiboservice","role":"collection","type":"topic","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService","abstract":[{"text":"A library that provides everything the developer needs to interact with the ","type":"text"},{"inlineContent":[{"text":"Amiibo API","type":"text"}],"type":"strong"},{"text":" backend service.","type":"text"}],"title":"AmiiboService"},"doc://AmiiboService/documentation/AmiiboService/AmiiboService":{"navigatorTitle":[{"kind":"identifier","text":"AmiiboService"}],"kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService","url":"\/documentation\/amiiboservice\/amiiboservice","type":"topic","title":"AmiiboService","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboService","kind":"identifier"}],"abstract":[{"text":"A type that implements the service that uses a client to make calls.","type":"text"}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboServiceError":{"abstract":[{"text":"A representation of all the possible errors that the ","type":"text"},{"isActive":true,"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService","type":"reference"},{"type":"text","text":" service could throw."}],"kind":"symbol","fragments":[{"text":"enum","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboServiceError","kind":"identifier"}],"title":"AmiiboServiceError","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboServiceError","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AmiiboServiceError"}],"url":"\/documentation\/amiiboservice\/amiiboserviceerror","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/AmiiboType":{"navigatorTitle":[{"kind":"identifier","text":"AmiiboType"}],"kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboType","url":"\/documentation\/amiiboservice\/amiibotype","type":"topic","title":"AmiiboType","role":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AmiiboType"}],"abstract":[{"type":"text","text":"A model that represents an amiibo type."}]},"doc://AmiiboService/documentation/AmiiboService/GameCharacter":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"GameCharacter"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacter","kind":"symbol","type":"topic","navigatorTitle":[{"text":"GameCharacter","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/gamecharacter","title":"GameCharacter","role":"symbol","abstract":[{"text":"A model that represents a game character.","type":"text"}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboLiveClient":{"navigatorTitle":[{"kind":"identifier","text":"AmiiboLiveClient"}],"kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboLiveClient","url":"\/documentation\/amiiboservice\/amiiboliveclient","type":"topic","title":"AmiiboLiveClient","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboLiveClient","kind":"identifier"}],"abstract":[{"type":"text","text":"A type that implements a live client to the "},{"isActive":true,"identifier":"https:\/\/www.amiiboapi.org","type":"reference"},{"text":" online service.","type":"text"}]},"doc://AmiiboService/documentation/AmiiboService/GameSeries":{"navigatorTitle":[{"text":"GameSeries","kind":"identifier"}],"kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeries","url":"\/documentation\/amiiboservice\/gameseries","type":"topic","title":"GameSeries","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"GameSeries","kind":"identifier"}],"abstract":[{"type":"text","text":"A model that represents a game series."}]},"doc://AmiiboService/documentation/AmiiboService/GameCharacterFilter":{"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"GameCharacterFilter"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameCharacterFilter","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"GameCharacterFilter"}],"url":"\/documentation\/amiiboservice\/gamecharacterfilter","title":"GameCharacterFilter","role":"symbol","abstract":[{"text":"A type that contains values to fine-tune a response when requesting game characters.","type":"text"}]},"doc://AmiiboService/documentation/AmiiboService/GameSeriesFilter":{"abstract":[{"type":"text","text":"A type that contains values to fine-tune a response when requesting game series."}],"kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"GameSeriesFilter","kind":"identifier"}],"title":"GameSeriesFilter","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/GameSeriesFilter","type":"topic","navigatorTitle":[{"kind":"identifier","text":"GameSeriesFilter"}],"url":"\/documentation\/amiiboservice\/gameseriesfilter","role":"symbol"},"doc://AmiiboService/documentation/AmiiboService/AmiiboTypeFilter":{"abstract":[{"type":"text","text":"A type that contains values to fine-tune a response when requesting amiibo types."}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboTypeFilter","url":"\/documentation\/amiiboservice\/amiibotypefilter","title":"AmiiboTypeFilter","type":"topic","role":"symbol","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboTypeFilter","kind":"identifier"}],"navigatorTitle":[{"text":"AmiiboTypeFilter","kind":"identifier"}],"kind":"symbol"},"doc://AmiiboService/documentation/AmiiboService/AmiiboFilter":{"fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AmiiboFilter"}],"kind":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboFilter","type":"topic","navigatorTitle":[{"text":"AmiiboFilter","kind":"identifier"}],"url":"\/documentation\/amiiboservice\/amiibofilter","title":"AmiiboFilter","role":"symbol","abstract":[{"type":"text","text":"A type that contains values to fine-tune a response when requesting amiibo items."}]},"doc://AmiiboService/documentation/AmiiboService/Amiibo":{"url":"\/documentation\/amiiboservice\/amiibo","kind":"symbol","role":"symbol","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/Amiibo","abstract":[{"type":"text","text":"A model that represents an amiibo."}],"fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Amiibo"}],"navigatorTitle":[{"kind":"identifier","text":"Amiibo"}],"title":"Amiibo","type":"topic"},"doc://AmiiboService/documentation/AmiiboService/AmiiboService/init(client:)":{"fragments":[{"text":"init","kind":"identifier"},{"text":"(","kind":"text"},{"text":"client","kind":"externalParam"},{"text":": ","kind":"text"},{"text":"some","kind":"keyword"},{"text":" ","kind":"text"},{"text":"AmiiboClient","preciseIdentifier":"s:13AmiiboService0A6ClientP","kind":"typeIdentifier"},{"text":")","kind":"text"}],"identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboService\/init(client:)","kind":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiiboservice\/init(client:)","title":"init(client:)","role":"symbol","abstract":[{"type":"text","text":"Initializes this service with a specific client type."}]},"doc://AmiiboService/documentation/AmiiboService/AmiiboClient":{"fragments":[{"text":"protocol","kind":"keyword"},{"kind":"text","text":" "},{"text":"AmiiboClient","kind":"identifier"}],"title":"AmiiboClient","navigatorTitle":[{"text":"AmiiboClient","kind":"identifier"}],"abstract":[{"type":"text","text":"A protocol that defines API clients containing all available endpoints to interact with."}],"role":"symbol","kind":"symbol","type":"topic","url":"\/documentation\/amiiboservice\/amiiboclient","identifier":"doc:\/\/AmiiboService\/documentation\/AmiiboService\/AmiiboClient"}}}