Skip to content

Commit a6acdbe

Browse files
authored
3.1.0 (#70)
1 parent 6b43a17 commit a6acdbe

33 files changed

+183
-155
lines changed

CHANGELOG.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
## [3.1.0] - 2019-12-19
9+
### Added
10+
- (Server) Routing is exposed via `server` library.
11+
12+
### Changed
13+
- (Server) `Controller` renamed to `JsonApiController`.
14+
- (Server) `Response` renamed to `JsonApiResponse`.
15+
16+
### Fixed
17+
- (Server) Response classes had `included` member initialized to `[]` by default. Now the default is `null`.
18+
819
## [3.0.0] - 2019-12-17
920
### Added
1021
- Support for custom non-standard links ([#61](https://github.com/f3ath/json-api-dart/issues/61))
@@ -117,7 +128,8 @@ Most of the changes are **BC-BREAKING**.
117128
### Added
118129
- Client: fetch resources, collections, related resources and relationships
119130

120-
[Unreleased]: https://github.com/f3ath/json-api-dart/compare/3.0.0...HEAD
131+
[Unreleased]: https://github.com/f3ath/json-api-dart/compare/3.1.0...HEAD
132+
[3.1.0]: https://github.com/f3ath/json-api-dart/compare/3.0.0...3.1.0
121133
[3.0.0]: https://github.com/f3ath/json-api-dart/compare/2.1.0...3.0.0
122134
[2.1.0]: https://github.com/f3ath/json-api-dart/compare/2.0.3...2.1.0
123135
[2.0.3]: https://github.com/f3ath/json-api-dart/compare/2.0.2...2.0.3

example/cars_server/controller.dart

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import 'package:uuid/uuid.dart';
77
import 'dao.dart';
88
import 'job_queue.dart';
99

10-
class CarsController implements Controller {
10+
class CarsController implements JsonApiController {
1111
final Map<String, DAO> _dao;
1212

1313
final PaginationStrategy _pagination;
1414

1515
CarsController(this._dao, this._pagination);
1616

1717
@override
18-
Response fetchCollection(String type, Uri uri) {
18+
JsonApiResponse fetchCollection(String type, Uri uri) {
1919
final page = Page.fromUri(uri);
2020
final dao = _getDaoOrThrow(type);
2121
final collection =
@@ -25,7 +25,8 @@ class CarsController implements Controller {
2525
}
2626

2727
@override
28-
Response fetchRelated(String type, String id, String relationship, Uri uri) {
28+
JsonApiResponse fetchRelated(
29+
String type, String id, String relationship, Uri uri) {
2930
final res = _fetchResourceOrThrow(type, id);
3031
final page = Page.fromUri(uri);
3132
if (res.toOne.containsKey(relationship)) {
@@ -46,7 +47,7 @@ class CarsController implements Controller {
4647
}
4748

4849
@override
49-
Response fetchResource(String type, String id, Uri uri) {
50+
JsonApiResponse fetchResource(String type, String id, Uri uri) {
5051
final dao = _getDaoOrThrow(type);
5152
final obj = dao.fetchById(id);
5253
final include = Include.fromUri(uri);
@@ -72,7 +73,7 @@ class CarsController implements Controller {
7273
}
7374

7475
@override
75-
Response fetchRelationship(
76+
JsonApiResponse fetchRelationship(
7677
String type, String id, String relationship, Uri uri) {
7778
final res = _fetchResourceOrThrow(type, id);
7879

@@ -88,7 +89,7 @@ class CarsController implements Controller {
8889
}
8990

9091
@override
91-
Response deleteResource(String type, String id) {
92+
JsonApiResponse deleteResource(String type, String id) {
9293
final dao = _getDaoOrThrow(type);
9394

9495
final res = dao.fetchByIdAsResource(id);
@@ -104,7 +105,7 @@ class CarsController implements Controller {
104105
}
105106

106107
@override
107-
Response createResource(String type, Resource resource) {
108+
JsonApiResponse createResource(String type, Resource resource) {
108109
final dao = _getDaoOrThrow(type);
109110

110111
_throwIfIncompatibleTypes(type, resource);
@@ -139,7 +140,7 @@ class CarsController implements Controller {
139140
}
140141

141142
@override
142-
Response updateResource(String type, String id, Resource resource) {
143+
JsonApiResponse updateResource(String type, String id, Resource resource) {
143144
final dao = _getDaoOrThrow(type);
144145

145146
_throwIfIncompatibleTypes(type, resource);
@@ -155,7 +156,7 @@ class CarsController implements Controller {
155156
}
156157

157158
@override
158-
Response replaceToOne(
159+
JsonApiResponse replaceToOne(
159160
String type, String id, String relationship, Identifier identifier) {
160161
final dao = _getDaoOrThrow(type);
161162

@@ -164,7 +165,7 @@ class CarsController implements Controller {
164165
}
165166

166167
@override
167-
Response replaceToMany(String type, String id, String relationship,
168+
JsonApiResponse replaceToMany(String type, String id, String relationship,
168169
List<Identifier> identifiers) {
169170
final dao = _getDaoOrThrow(type);
170171

@@ -173,7 +174,7 @@ class CarsController implements Controller {
173174
}
174175

175176
@override
176-
Response addToMany(String type, String id, String relationship,
177+
JsonApiResponse addToMany(String type, String id, String relationship,
177178
List<Identifier> identifiers) {
178179
final dao = _getDaoOrThrow(type);
179180

lib/server.dart

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
11
/// The JSON:API Server.
2+
///
23
/// **WARNING!**
4+
///
35
/// **The server is still under development! Not for production!**
6+
///
47
/// **The API is not stable!**
58
library server;
69

710
export 'package:json_api/query.dart';
8-
export 'package:json_api/src/pagination/fixed_size_page.dart';
9-
export 'package:json_api/src/pagination/pagination_strategy.dart';
10-
export 'package:json_api/src/server/controller.dart';
11+
export 'package:json_api/src/server/http_method.dart';
12+
export 'package:json_api/src/server/json_api_controller.dart';
1113
export 'package:json_api/src/server/json_api_server.dart';
14+
export 'package:json_api/src/server/pagination/fixed_size_page.dart';
15+
export 'package:json_api/src/server/pagination/pagination_strategy.dart';
1216
export 'package:json_api/src/server/response/accepted_response.dart';
1317
export 'package:json_api/src/server/response/collection_response.dart';
1418
export 'package:json_api/src/server/response/error_response.dart';
19+
export 'package:json_api/src/server/response/json_api_response.dart';
1520
export 'package:json_api/src/server/response/meta_response.dart';
1621
export 'package:json_api/src/server/response/no_content_response.dart';
1722
export 'package:json_api/src/server/response/related_collection_response.dart';
1823
export 'package:json_api/src/server/response/related_resource_response.dart';
1924
export 'package:json_api/src/server/response/resource_created_response.dart';
2025
export 'package:json_api/src/server/response/resource_response.dart';
2126
export 'package:json_api/src/server/response/resource_updated_response.dart';
22-
export 'package:json_api/src/server/response/response.dart';
2327
export 'package:json_api/src/server/response/see_other_response.dart';
2428
export 'package:json_api/src/server/response/to_many_response.dart';
2529
export 'package:json_api/src/server/response/to_one_response.dart';
30+
export 'package:json_api/src/server/routing/route.dart';
31+
export 'package:json_api/src/server/routing/route_factory.dart';
32+
export 'package:json_api/src/server/server_document_factory.dart';
2633
export 'package:json_api/url_design.dart';

lib/src/client/client_document_factory.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import 'package:json_api/src/nullable.dart';
55
/// for building the JSON representation of the outgoing resources.
66
class ClientDocumentFactory {
77
/// Creates an instance of the factory.
8-
ClientDocumentFactory({Api api}) : _api = api ?? Api();
8+
ClientDocumentFactory({Api api}) : _api = api;
99

1010
/// Makes a document containing a single resource.
1111
Document<ResourceData> makeResourceDocument(Resource resource) =>

lib/src/server/controller.dart

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import 'dart:async';
2+
3+
import 'package:json_api/document.dart';
4+
import 'package:json_api/src/document/identifier.dart';
5+
import 'package:json_api/src/document/resource.dart';
6+
import 'package:json_api/src/server/response/json_api_response.dart';
7+
8+
abstract class JsonApiController {
9+
FutureOr<JsonApiResponse> fetchCollection(String type, Uri uri);
10+
11+
FutureOr<JsonApiResponse> fetchResource(String type, String id, Uri uri);
12+
13+
FutureOr<JsonApiResponse> fetchRelated(
14+
String type, String id, String relationship, Uri uri);
15+
16+
FutureOr<JsonApiResponse> fetchRelationship(
17+
String type, String id, String relationship, Uri uri);
18+
19+
FutureOr<JsonApiResponse> deleteResource(String type, String id);
20+
21+
FutureOr<JsonApiResponse> createResource(String type, Resource resource);
22+
23+
FutureOr<JsonApiResponse> updateResource(
24+
String type, String id, Resource resource);
25+
26+
FutureOr<JsonApiResponse> replaceToOne(
27+
String type, String id, String relationship, Identifier identifier);
28+
29+
FutureOr<JsonApiResponse> replaceToMany(String type, String id,
30+
String relationship, List<Identifier> identifiers);
31+
32+
FutureOr<JsonApiResponse> addToMany(String type, String id,
33+
String relationship, List<Identifier> identifiers);
34+
}

lib/src/server/json_api_server.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ import 'dart:async';
22
import 'dart:convert';
33
import 'dart:io';
44

5-
import 'package:json_api/src/server/controller.dart';
65
import 'package:json_api/src/server/http_method.dart';
6+
import 'package:json_api/src/server/json_api_controller.dart';
77
import 'package:json_api/src/server/response/error_response.dart';
8-
import 'package:json_api/src/server/response/response.dart';
8+
import 'package:json_api/src/server/response/json_api_response.dart';
99
import 'package:json_api/src/server/routing/route_factory.dart';
1010
import 'package:json_api/src/server/server_document_factory.dart';
1111
import 'package:json_api/url_design.dart';
1212

1313
class JsonApiServer {
1414
final UrlDesign urlDesign;
15-
final Controller controller;
15+
final JsonApiController controller;
1616
final ServerDocumentFactory documentFactory;
1717
final String allowOrigin;
1818
final RouteFactory routeMapper;
@@ -31,7 +31,8 @@ class JsonApiServer {
3131
return request.response.close();
3232
}
3333

34-
Future<Response> _call(Controller controller, HttpRequest request) async {
34+
Future<JsonApiResponse> _call(
35+
JsonApiController controller, HttpRequest request) async {
3536
final method = HttpMethod(request.method);
3637
final body = await _getBody(request);
3738
try {
@@ -43,16 +44,16 @@ class JsonApiServer {
4344
}
4445
}
4546

46-
void _writeBody(HttpRequest request, Response response) {
47+
void _writeBody(HttpRequest request, JsonApiResponse response) {
4748
final doc = response.buildDocument(documentFactory, request.requestedUri);
4849
if (doc != null) request.response.write(json.encode(doc));
4950
}
5051

51-
void _setStatus(HttpRequest request, Response response) {
52+
void _setStatus(HttpRequest request, JsonApiResponse response) {
5253
request.response.statusCode = response.status;
5354
}
5455

55-
void _setHeaders(HttpRequest request, Response response) {
56+
void _setHeaders(HttpRequest request, JsonApiResponse response) {
5657
final add = request.response.headers.add;
5758
response.getHeaders(urlDesign).forEach(add);
5859
if (allowOrigin != null) add('Access-Control-Allow-Origin', allowOrigin);

lib/src/pagination/fixed_size_page.dart renamed to lib/src/server/pagination/fixed_size_page.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import 'package:json_api/src/pagination/pagination_strategy.dart';
21
import 'package:json_api/src/query/page.dart';
2+
import 'package:json_api/src/server/pagination/pagination_strategy.dart';
33

44
class FixedSizePage implements PaginationStrategy {
55
final int size;

lib/src/pagination/no_pagination.dart renamed to lib/src/server/pagination/no_pagination.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import 'package:json_api/src/pagination/pagination_strategy.dart';
21
import 'package:json_api/src/query/page.dart';
2+
import 'package:json_api/src/server/pagination/pagination_strategy.dart';
33

44
class NoPagination implements PaginationStrategy {
55
const NoPagination();
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import 'package:json_api/document.dart';
2-
import 'package:json_api/src/server/response/response.dart';
2+
import 'package:json_api/src/server/response/json_api_response.dart';
33
import 'package:json_api/src/server/server_document_factory.dart';
44
import 'package:json_api/url_design.dart';
55

6-
class AcceptedResponse extends Response {
6+
class AcceptedResponse extends JsonApiResponse {
77
final Resource resource;
88

99
AcceptedResponse(this.resource) : super(202);
@@ -14,9 +14,9 @@ class AcceptedResponse extends Response {
1414
factory.makeResourceDocument(self, resource);
1515

1616
@override
17-
Map<String, String> getHeaders(UrlFactory route) => {
18-
...super.getHeaders(route),
17+
Map<String, String> getHeaders(UrlFactory urlFactory) => {
18+
...super.getHeaders(urlFactory),
1919
'Content-Location':
20-
route.resource(resource.type, resource.id).toString(),
20+
urlFactory.resource(resource.type, resource.id).toString(),
2121
};
2222
}

lib/src/server/response/collection_response.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import 'package:json_api/document.dart';
2-
import 'package:json_api/src/server/response/response.dart';
2+
import 'package:json_api/src/server/response/json_api_response.dart';
33
import 'package:json_api/src/server/server_document_factory.dart';
44

5-
class CollectionResponse extends Response {
5+
class CollectionResponse extends JsonApiResponse {
66
final Iterable<Resource> collection;
77
final Iterable<Resource> included;
88
final int total;
99

10-
const CollectionResponse(this.collection,
11-
{this.included = const [], this.total})
10+
const CollectionResponse(this.collection, {this.included, this.total})
1211
: super(200);
1312

1413
@override

lib/src/server/response/error_response.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import 'package:json_api/document.dart';
2-
import 'package:json_api/src/server/response/response.dart';
2+
import 'package:json_api/src/server/response/json_api_response.dart';
33
import 'package:json_api/src/server/server_document_factory.dart';
44

5-
class ErrorResponse extends Response {
5+
class ErrorResponse extends JsonApiResponse {
66
final Iterable<JsonApiError> errors;
77

88
const ErrorResponse(int status, this.errors) : super(status);

lib/src/server/response/response.dart renamed to lib/src/server/response/json_api_response.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import 'package:json_api/document.dart';
22
import 'package:json_api/src/server/server_document_factory.dart';
33
import 'package:json_api/url_design.dart';
44

5-
abstract class Response {
5+
abstract class JsonApiResponse {
66
final int status;
77

8-
const Response(this.status);
8+
const JsonApiResponse(this.status);
99

1010
Document buildDocument(ServerDocumentFactory factory, Uri self);
1111

12-
Map<String, String> getHeaders(UrlFactory route) =>
12+
Map<String, String> getHeaders(UrlFactory urlFactory) =>
1313
{'Content-Type': Document.contentType};
1414
}

lib/src/server/response/meta_response.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import 'package:json_api/document.dart';
2-
import 'package:json_api/src/server/response/response.dart';
2+
import 'package:json_api/src/server/response/json_api_response.dart';
33
import 'package:json_api/src/server/server_document_factory.dart';
44

5-
class MetaResponse extends Response {
5+
class MetaResponse extends JsonApiResponse {
66
final Map<String, Object> meta;
77

88
MetaResponse(this.meta) : super(200);

0 commit comments

Comments
 (0)