Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/f3ath/json-api-dart

JSON:API client and server for Dart/Flutter
https://github.com/f3ath/json-api-dart

api dart dartlang flutter hacktoberfest helplessness http http-client json json-api json-api-client jsonapi rest rest-api

Last synced: 27 days ago
JSON representation

JSON:API client and server for Dart/Flutter

Awesome Lists containing this project

README

        

# JSON:API Client and Server

TL;DR:
```dart
import 'package:http/http.dart' as http;
import 'package:http_interop_http/http_interop_http.dart';
import 'package:json_api/client.dart';
import 'package:json_api/routing.dart';

void main() async {
/// Define the server's base URL
final baseUri = 'http://localhost:8080';

/// Use the standard recommended URL structure or implement your own
final uriDesign = StandardUriDesign(Uri.parse(baseUri));

/// This is the Dart's standard HTTP client.
/// Do not forget to close it in the end.
final httpClient = http.Client();

/// This is the interface which decouples this JSON:API implementation
/// from the HTTP client.
/// Learn more: https://pub.dev/packages/http_interop
final httpHandler = httpClient.handleInterop;

/// This is the basic JSON:API client. It is flexible but not very convenient
/// to use, because you would need to remember a lot of JSON:API protocol details.
/// We will use another wrapper on top of it.
final jsonApiClient = Client(httpHandler);

/// The [RoutingClient] is most likely the right choice.
/// It is called routing because it routes the calls to the correct
/// URLs depending on the use case. Take a look at its methods, they cover
/// all the standard scenarios specified by the JSON:API standard.
final client = RoutingClient(uriDesign, jsonApiClient);

try {
/// Fetch the collection.
/// See other methods to query and manipulate resources.
final response = await client.fetchCollection('colors');

/// The fetched collection allows us to iterate over the resources
/// and to look into their attributes
for (final resource in response.collection) {
final {
'name': name,
'red': red,
'green': green,
'blue': blue,
} = resource.attributes;
print('${resource.type}:${resource.id}');
print('$name - $red:$green:$blue');
}
} on RequestFailure catch (e) {
/// Catch error response
for (final error in e.errors) {
print(error.title);
}
}

/// Free up the resources before exit.
httpClient.close();
}
```
This is a work-in-progress. You can help it by submitting a PR with a feature or documentation improvements.

[JSON:API]: https://jsonapi.org