From a1aa7928d17e39f43737ee73acf7cfac02701ef7 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 30 Oct 2017 14:41:51 -0500 Subject: [PATCH] add API versioning infrastructure closes #142 --- data/DataSample.json | 4 +- data/DataSchema.json | 95 ++++++++++++++++++- .../Extensions/ConfigureServicesCollection.cs | 1 + src/FilterLists.Api/FilterLists.Api.csproj | 1 + src/FilterLists.Api/Startup.cs | 2 +- .../{ => V1}/Controllers/ListsController.cs | 3 +- 6 files changed, 101 insertions(+), 5 deletions(-) rename src/FilterLists.Api/{ => V1}/Controllers/ListsController.cs (88%) diff --git a/data/DataSample.json b/data/DataSample.json index b77eccaff..a4facc7d7 100644 --- a/data/DataSample.json +++ b/data/DataSample.json @@ -1,5 +1,5 @@ { - "Email": "john.smith@protonmail.com", + "EmailAddress": "john.smith@protonmail.com", "FilterLists": [ { "Description": "A sample list to filter out advertisements.", @@ -10,6 +10,7 @@ "HomeUrl": "https://mysample.list/", "IssuesUrl": "https://github.com/johnsmith/mysamplelist/issues", "FilterListLanguages": null, + "FilterListRules": null, "FilterListSoftware": null, "MaintainerId": null, "Name": "My Sample Advertisement Filter List", @@ -27,6 +28,7 @@ "HomeUrl": "https://mysample.list/", "IssuesUrl": "https://github.com/johnsmith/mysamplelist/issues", "FilterListLanguages": null, + "FilterListRules": null, "FilterListSoftware": null, "MaintainerId": null, "Name": "My Sample Malware Filter List", diff --git a/data/DataSchema.json b/data/DataSchema.json index 8827383ad..25c63db76 100644 --- a/data/DataSchema.json +++ b/data/DataSchema.json @@ -57,6 +57,15 @@ "$ref": "#/definitions/FilterListLanguage" } }, + "FilterListRules": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/FilterListRule" + } + }, "FilterListSoftware": { "type": [ "array", @@ -105,6 +114,7 @@ "HomeUrl", "IssuesUrl", "FilterListLanguages", + "FilterListRules", "FilterListSoftware", "MaintainerId", "Name", @@ -154,6 +164,46 @@ "ModifiedDateUtc" ] }, + "FilterListRule": { + "type": [ + "object", + "null" + ], + "properties": { + "FilterListId": { + "type": "integer" + }, + "FilterList": { + "$ref": "#/definitions/FilterList" + }, + "RuleId": { + "type": "integer" + }, + "Rule": { + "$ref": "#/definitions/Rule" + }, + "Id": { + "type": "integer" + }, + "CreatedDateUtc": { + "type": "string", + "format": "date-time" + }, + "ModifiedDateUtc": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "FilterListId", + "FilterList", + "RuleId", + "Rule", + "Id", + "CreatedDateUtc", + "ModifiedDateUtc" + ] + }, "FilterListSoftware": { "type": [ "object", @@ -277,6 +327,47 @@ "ModifiedDateUtc" ] }, + "Rule": { + "type": [ + "object", + "null" + ], + "properties": { + "FilterListRules": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/FilterListRule" + } + }, + "Raw": { + "type": [ + "string", + "null" + ] + }, + "Id": { + "type": "integer" + }, + "CreatedDateUtc": { + "type": "string", + "format": "date-time" + }, + "ModifiedDateUtc": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "FilterListRules", + "Raw", + "Id", + "CreatedDateUtc", + "ModifiedDateUtc" + ] + }, "Software": { "type": [ "object", @@ -335,7 +426,7 @@ }, "type": "object", "properties": { - "Email": { + "EmailAddress": { "type": [ "string", "null" @@ -381,7 +472,7 @@ } }, "required": [ - "Email", + "EmailAddress", "FilterLists", "HomeUrl", "Name", diff --git a/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs index b1019db5f..b1359c68a 100644 --- a/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs +++ b/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -10,6 +10,7 @@ public static class ConfigureServicesCollection public static void AddFilterListsApi(this IServiceCollection services) { services.AddMvc(); + services.AddApiVersioning(); services.AddSwagger(); } diff --git a/src/FilterLists.Api/FilterLists.Api.csproj b/src/FilterLists.Api/FilterLists.Api.csproj index 546dd638d..409caad80 100644 --- a/src/FilterLists.Api/FilterLists.Api.csproj +++ b/src/FilterLists.Api/FilterLists.Api.csproj @@ -24,6 +24,7 @@ + diff --git a/src/FilterLists.Api/Startup.cs b/src/FilterLists.Api/Startup.cs index 8ffb10299..5f6adca76 100644 --- a/src/FilterLists.Api/Startup.cs +++ b/src/FilterLists.Api/Startup.cs @@ -38,7 +38,7 @@ public void Configure(IApplicationBuilder app) app.UseStaticFiles(); - app.UseMvc(routes => { routes.MapRoute("default", "v1/{controller=Default}/{action=Get}/{id?}"); }); + app.UseMvc(routes => { routes.MapRoute("default", "v{version:apiVersion}/{controller=Default}/{action=Get}/{id?}"); }); } } } \ No newline at end of file diff --git a/src/FilterLists.Api/Controllers/ListsController.cs b/src/FilterLists.Api/V1/Controllers/ListsController.cs similarity index 88% rename from src/FilterLists.Api/Controllers/ListsController.cs rename to src/FilterLists.Api/V1/Controllers/ListsController.cs index 18a6ad0a8..85df22622 100644 --- a/src/FilterLists.Api/Controllers/ListsController.cs +++ b/src/FilterLists.Api/V1/Controllers/ListsController.cs @@ -1,8 +1,9 @@ using FilterLists.Services.Contracts; using Microsoft.AspNetCore.Mvc; -namespace FilterLists.Api.Controllers +namespace FilterLists.Api.V1.Controllers { + [ApiVersion("1.0")] [Produces("application/json")] public class ListsController : Controller {