Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Produce OpenAPI document describing CCF's endpoints #1612

Merged
merged 64 commits into from
Sep 25, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
6f7df55
Add to_upper and to_lower to nonstd.h
eddyashton Jun 24, 2020
af0ef44
Use nonstd::to_lower
eddyashton Jun 24, 2020
78e5e78
WIP: Add types for OpenAPI doc
eddyashton Jun 24, 2020
94d3779
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Jun 25, 2020
2f1a965
WIP: "api" returns openapi, not method list
eddyashton Jun 25, 2020
1510aaf
Prefer openapi to openapi_schema
eddyashton Jun 25, 2020
fb3466a
WIP: Maybe a deadend...
eddyashton Jun 25, 2020
ed846b7
WIP: 3 cheers for operator[]
eddyashton Jun 25, 2020
32b9d46
Is this what a helpful modifier looks like?
eddyashton Jun 25, 2020
325a59c
WIP: Helper method for adding response schema
eddyashton Jun 25, 2020
8ad27d2
Add schema_name to generate sensible components fieldname
eddyashton Jun 26, 2020
bd1eb15
WIP
eddyashton Jun 26, 2020
0ef2951
WIP: add_request_body_schema
eddyashton Jun 26, 2020
964f863
WIP: Forgive me father for I have sinned
eddyashton Jun 29, 2020
b508e87
WIP: Support optional fields
eddyashton Jun 29, 2020
89340ce
Fix for optional fields
eddyashton Jun 29, 2020
da7039e
WIP: Add support for renames
eddyashton Jun 29, 2020
016c7df
WIP: Fix duplicate-required and missing-base-elements
eddyashton Jun 29, 2020
7a8ebd3
Support for vectors, fancy types
eddyashton Jun 30, 2020
1b9fc33
Remove some fixed TODOs
eddyashton Jun 30, 2020
e92bb37
Separate simple and complex test cases
eddyashton Jun 30, 2020
593005d
Steps towards pure JSON doc
eddyashton Jun 30, 2020
a01d2c5
Partial compile fixes
eddyashton Sep 9, 2020
d4b3a6e
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 9, 2020
b7e75ea
Get to compilation
eddyashton Sep 9, 2020
55a4f73
Update schema.py to just validate that the result is a valid OpenAPI doc
eddyashton Sep 9, 2020
9c6adcc
Remove separate schema. Oh no
eddyashton Sep 9, 2020
8f736e3
Progress: schema_test dumps OpenAPI docs to file, initial files
eddyashton Sep 10, 2020
0296f09
Produce schema that the online validator is happy with
eddyashton Sep 10, 2020
1b24113
Drop an element the spec validator isn't happy with
eddyashton Sep 10, 2020
55d9402
Use freeform JSON manipulators everywhere, fix nested add_to_components
eddyashton Sep 10, 2020
d439221
Schema.py should continue to retrieve individual schema
eddyashton Sep 11, 2020
39de645
And here's those schemas again
eddyashton Sep 11, 2020
7314eb2
Strip out some uninteresting TODOs
eddyashton Sep 11, 2020
afc0999
Add schema for templated endpoints too
eddyashton Sep 11, 2020
45dc53d
WIO
eddyashton Sep 11, 2020
f74258d
Compile fixes
eddyashton Sep 14, 2020
669c1f6
Safe capture
eddyashton Sep 15, 2020
a4dcb9d
Prefix OpenAPI paths
eddyashton Sep 15, 2020
2ee7336
Get things in-sync
eddyashton Sep 15, 2020
6cdeab9
Progress
eddyashton Sep 15, 2020
ddf38bd
Split out params on all endpoints
eddyashton Sep 15, 2020
0970c09
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 15, 2020
ff405dd
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 15, 2020
57c214a
Format
eddyashton Sep 15, 2020
0701c77
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 16, 2020
c28ace5
Delete
eddyashton Sep 16, 2020
7596241
Oops - these lines restore result schema
eddyashton Sep 16, 2020
8d5a1b8
Add restored result schema
eddyashton Sep 16, 2020
78905b5
Document (minimum) JS endpoints
eddyashton Sep 17, 2020
08fe5a6
Hey we can do that in lua too
eddyashton Sep 17, 2020
890c9d7
Shout about TODOs again
eddyashton Sep 17, 2020
89d4d73
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 17, 2020
86889e8
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 21, 2020
c31c300
Fixups
eddyashton Sep 21, 2020
90c0c08
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 22, 2020
2132beb
Merge branch 'openapi_generation2' of github.com:eddyashton/CCF into …
eddyashton Sep 22, 2020
7e63db4
Make OpenAPI info customisable
eddyashton Sep 23, 2020
7c9b986
Update supports_method
eddyashton Sep 23, 2020
9241b61
Format
eddyashton Sep 23, 2020
c3353fa
Merge branch 'master' of github.com:microsoft/CCF into openapi_genera…
eddyashton Sep 24, 2020
56cf98b
Use is_arithmetic
eddyashton Sep 24, 2020
54c2c6c
Don't print in test
eddyashton Sep 24, 2020
4142618
Merge branch 'master' into openapi_generation2
eddyashton Sep 24, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Prev Previous commit
Next Next commit
WIP
  • Loading branch information
eddyashton committed Jun 26, 2020
commit bd1eb1581e1abac05442633e7819b41e8626e070
3 changes: 3 additions & 0 deletions src/ds/json_schema.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,12 +181,15 @@ namespace ds
nonstd::is_specialization<T, std::unordered_map>::value)
{
// Nlohmann serialises maps to an array of (K, V) pairs
// TODO: Unless the keys are strings!
schema["type"] = "array";
auto items = nlohmann::json::object();
{
items["type"] = "array";

auto sub_items = nlohmann::json::array();
// TODO: OpenAPI doesn't like this tuple for "items", even though its
// valid JSON schema. Maybe fixed in a newer spec version?
sub_items.push_back(schema_element<typename T::key_type>());
sub_items.push_back(schema_element<typename T::mapped_type>());
items["items"] = sub_items;
Expand Down
12 changes: 9 additions & 3 deletions src/ds/test/openapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,15 @@ TEST_CASE("Schema population")
}

doc.add_response_schema<Foo>(
"/app/foo", HTTP_GET, HTTP_STATUS_OK, http::headervalues::contenttype::JSON);
doc.add_response_schema<std::map<std::string, Foo>>(
"/app/foos", HTTP_GET, HTTP_STATUS_OK, http::headervalues::contenttype::JSON);
"/app/foo",
HTTP_GET,
HTTP_STATUS_OK,
http::headervalues::contenttype::JSON);
doc.add_response_schema<std::vector<Foo>>(
"/app/foos",
HTTP_GET,
HTTP_STATUS_OK,
http::headervalues::contenttype::JSON);

const nlohmann::json j = doc;
required_doc_elements(j);
Expand Down