@documentation-robotics/cli 0.1.13 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -2
- package/dist/analysis/relationship-classifier.js +2 -9
- package/dist/analysis/relationship-classifier.js.map +2 -2
- package/dist/analyzers/call-graph-utils.js +2 -2
- package/dist/analyzers/call-graph-utils.js.map +2 -2
- package/dist/analyzers/cards/build.js +171 -0
- package/dist/analyzers/cards/build.js.map +7 -0
- package/dist/analyzers/cards/classify.js +42 -0
- package/dist/analyzers/cards/classify.js.map +7 -0
- package/dist/analyzers/cards/edge-index.js +44 -0
- package/dist/analyzers/cards/edge-index.js.map +7 -0
- package/dist/analyzers/cards/facts.js +46 -0
- package/dist/analyzers/cards/facts.js.map +7 -0
- package/dist/analyzers/cards/graph.js +42 -0
- package/dist/analyzers/cards/graph.js.map +7 -0
- package/dist/analyzers/cards/index.js +8 -0
- package/dist/analyzers/cards/index.js.map +7 -0
- package/dist/analyzers/cards/tier0.js +18 -0
- package/dist/analyzers/cards/tier0.js.map +7 -0
- package/dist/analyzers/cards/types.js +1 -0
- package/dist/analyzers/cards/types.js.map +7 -0
- package/dist/analyzers/cbm-analyzer.js +195 -171
- package/dist/analyzers/cbm-analyzer.js.map +2 -2
- package/dist/analyzers/cbm-responses.js +336 -0
- package/dist/analyzers/cbm-responses.js.map +7 -0
- package/dist/analyzers/edge-relationships.js +45 -0
- package/dist/analyzers/edge-relationships.js.map +7 -0
- package/dist/analyzers/mapping-loader.js +9 -0
- package/dist/analyzers/mapping-loader.js.map +2 -2
- package/dist/analyzers/tier0-rules.js +153 -0
- package/dist/analyzers/tier0-rules.js.map +7 -0
- package/dist/analyzers/types.js.map +1 -1
- package/dist/analyzers/verify-engine.js +22 -19
- package/dist/analyzers/verify-engine.js.map +2 -2
- package/dist/audit/relationships/ai/prompts.js +10 -10
- package/dist/audit/relationships/ai/prompts.js.map +2 -2
- package/dist/audit/relationships/analysis/layer-templates.js +52 -52
- package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
- package/dist/cli.js +112 -28
- package/dist/cli.js.map +3 -3
- package/dist/coding-agents/agents/claude-code.js +3 -1
- package/dist/coding-agents/agents/claude-code.js.map +2 -2
- package/dist/coding-agents/claude-code-client.js +2 -1
- package/dist/coding-agents/claude-code-client.js.map +2 -2
- package/dist/coding-agents/copilot-client.js +17 -12
- package/dist/coding-agents/copilot-client.js.map +2 -2
- package/dist/coding-agents/default-permissions.js +152 -0
- package/dist/coding-agents/default-permissions.js.map +7 -0
- package/dist/coding-agents/drbot-mcp.js +167 -0
- package/dist/coding-agents/drbot-mcp.js.map +7 -0
- package/dist/commands/add.js +12 -7
- package/dist/commands/add.js.map +2 -2
- package/dist/commands/analyzer.js +134 -23
- package/dist/commands/analyzer.js.map +2 -2
- package/dist/commands/audit.js +6 -6
- package/dist/commands/audit.js.map +2 -2
- package/dist/commands/changeset-verify.js +55 -0
- package/dist/commands/changeset-verify.js.map +7 -0
- package/dist/commands/changeset.js +261 -147
- package/dist/commands/changeset.js.map +2 -2
- package/dist/commands/delete.js +52 -19
- package/dist/commands/delete.js.map +3 -3
- package/dist/commands/element.js +3 -2
- package/dist/commands/element.js.map +2 -2
- package/dist/commands/farm.js +773 -0
- package/dist/commands/farm.js.map +7 -0
- package/dist/commands/init.js +11 -1
- package/dist/commands/init.js.map +2 -2
- package/dist/commands/mcp.js +122 -0
- package/dist/commands/mcp.js.map +7 -0
- package/dist/commands/relationship.js +251 -47
- package/dist/commands/relationship.js.map +2 -2
- package/dist/commands/reports.js +1 -1
- package/dist/commands/reports.js.map +2 -2
- package/dist/commands/update.js +56 -24
- package/dist/commands/update.js.map +2 -2
- package/dist/commands/upgrade.js +99 -11
- package/dist/commands/upgrade.js.map +3 -3
- package/dist/commands/validate.js +41 -3
- package/dist/commands/validate.js.map +2 -2
- package/dist/commands/version.js +2 -2
- package/dist/commands/version.js.map +2 -2
- package/dist/commands/visualize.js +4 -3
- package/dist/commands/visualize.js.map +2 -2
- package/dist/config.js +83 -0
- package/dist/config.js.map +7 -0
- package/dist/core/annotation-store.js +138 -0
- package/dist/core/annotation-store.js.map +7 -0
- package/dist/core/catalog-migration.js +33 -0
- package/dist/core/catalog-migration.js.map +7 -0
- package/dist/core/changeset-analysis.js +421 -0
- package/dist/core/changeset-analysis.js.map +7 -0
- package/dist/core/changeset-base-index.js +153 -0
- package/dist/core/changeset-base-index.js.map +7 -0
- package/dist/core/changeset-brief-delta.js +102 -0
- package/dist/core/changeset-brief-delta.js.map +7 -0
- package/dist/core/changeset-graph.js +281 -0
- package/dist/core/changeset-graph.js.map +7 -0
- package/dist/core/changeset-only-guard.js +32 -0
- package/dist/core/changeset-only-guard.js.map +7 -0
- package/dist/core/changeset-summary.js +68 -0
- package/dist/core/changeset-summary.js.map +7 -0
- package/dist/core/changeset-validator.js +66 -20
- package/dist/core/changeset-validator.js.map +2 -2
- package/dist/core/changeset-verify.js +518 -0
- package/dist/core/changeset-verify.js.map +7 -0
- package/dist/core/changeset.js +56 -9
- package/dist/core/changeset.js.map +2 -2
- package/dist/core/element-type-migration.js +145 -0
- package/dist/core/element-type-migration.js.map +7 -0
- package/dist/core/farm-manifest.js +140 -0
- package/dist/core/farm-manifest.js.map +7 -0
- package/dist/core/farm-sync-engine.js +346 -0
- package/dist/core/farm-sync-engine.js.map +7 -0
- package/dist/core/farm-sync-state.js +167 -0
- package/dist/core/farm-sync-state.js.map +7 -0
- package/dist/core/manifest.js +6 -3
- package/dist/core/manifest.js.map +2 -2
- package/dist/core/migration-registry.js +84 -1
- package/dist/core/migration-registry.js.map +2 -2
- package/dist/core/model-upgrade.js +102 -0
- package/dist/core/model-upgrade.js.map +7 -0
- package/dist/core/model.js +257 -44
- package/dist/core/model.js.map +3 -3
- package/dist/core/mutation-handler.js +71 -6
- package/dist/core/mutation-handler.js.map +2 -2
- package/dist/core/relationship-migration-table.js +6639 -0
- package/dist/core/relationship-migration-table.js.map +7 -0
- package/dist/core/relationship-migration.js +272 -0
- package/dist/core/relationship-migration.js.map +7 -0
- package/dist/core/relationship-prune.js +49 -0
- package/dist/core/relationship-prune.js.map +7 -0
- package/dist/core/relationship-staging.js +68 -0
- package/dist/core/relationship-staging.js.map +7 -0
- package/dist/core/relationships.js +26 -4
- package/dist/core/relationships.js.map +2 -2
- package/dist/core/report-data-model.js +7 -13
- package/dist/core/report-data-model.js.map +2 -2
- package/dist/core/staged-changeset-storage.js +64 -17
- package/dist/core/staged-changeset-storage.js.map +2 -2
- package/dist/core/staged-source-reference.js +28 -0
- package/dist/core/staged-source-reference.js.map +7 -0
- package/dist/core/staging-area.js +83 -18
- package/dist/core/staging-area.js.map +2 -2
- package/dist/core/virtual-projection.js +14 -5
- package/dist/core/virtual-projection.js.map +2 -2
- package/dist/export/archimate-exporter.js +1 -0
- package/dist/export/archimate-exporter.js.map +2 -2
- package/dist/generated/compiled-validators.js +2 -2
- package/dist/generated/compiled-validators.js.map +2 -2
- package/dist/generated/layer-registry.js +16 -16
- package/dist/generated/layer-registry.js.map +2 -2
- package/dist/generated/node-types.js +186 -168
- package/dist/generated/node-types.js.map +2 -2
- package/dist/generated/relationship-index.js +2209 -7727
- package/dist/generated/relationship-index.js.map +2 -2
- package/dist/integrations/claude_code/agents/dr-architect.md +16 -3
- package/dist/integrations/claude_code/agents/dr-extractor.md +1 -1
- package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
- package/dist/integrations/claude_code/commands/dr-map.md +13 -0
- package/dist/integrations/claude_code/commands/dr-plan.md +40 -0
- package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
- package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
- package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
- package/dist/integrations/claude_code/docs/MCP_SERVER.md +79 -0
- package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
- package/dist/integrations/claude_code/docs/README.md +52 -1
- package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
- package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
- package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
- package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
- package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
- package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
- package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
- package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
- package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
- package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
- package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
- package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
- package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +92 -15
- package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +1 -1
- package/dist/integrations/github_copilot/agents/dr-architect.md +1 -1
- package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
- package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
- package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
- package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
- package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
- package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
- package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
- package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
- package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
- package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
- package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
- package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
- package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +222 -102
- package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/hash-utils.js.map +2 -2
- package/dist/mcp/api-key-manager.js +111 -0
- package/dist/mcp/api-key-manager.js.map +7 -0
- package/dist/mcp/changeset-only.js +34 -0
- package/dist/mcp/changeset-only.js.map +7 -0
- package/dist/mcp/http-transport.js +176 -0
- package/dist/mcp/http-transport.js.map +7 -0
- package/dist/mcp/resource-registry.js +97 -0
- package/dist/mcp/resource-registry.js.map +7 -0
- package/dist/mcp/tool-registry.js +60 -0
- package/dist/mcp/tool-registry.js.map +7 -0
- package/dist/mcp/tools/annotation-create.js +39 -0
- package/dist/mcp/tools/annotation-create.js.map +7 -0
- package/dist/mcp/tools/annotation-delete.js +29 -0
- package/dist/mcp/tools/annotation-delete.js.map +7 -0
- package/dist/mcp/tools/annotation-get.js +29 -0
- package/dist/mcp/tools/annotation-get.js.map +7 -0
- package/dist/mcp/tools/annotation-list.js +24 -0
- package/dist/mcp/tools/annotation-list.js.map +7 -0
- package/dist/mcp/tools/annotation-reply.js +34 -0
- package/dist/mcp/tools/annotation-reply.js.map +7 -0
- package/dist/mcp/tools/annotation-shared.js +10 -0
- package/dist/mcp/tools/annotation-shared.js.map +7 -0
- package/dist/mcp/tools/annotation-update.js +39 -0
- package/dist/mcp/tools/annotation-update.js.map +7 -0
- package/dist/mcp/tools/changeset-analysis-tools.js +78 -0
- package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
- package/dist/mcp/tools/changeset-editing.js +184 -0
- package/dist/mcp/tools/changeset-editing.js.map +7 -0
- package/dist/mcp/tools/changeset-lifecycle.js +83 -0
- package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
- package/dist/mcp/tools/changeset-list.js +33 -0
- package/dist/mcp/tools/changeset-list.js.map +7 -0
- package/dist/mcp/tools/changeset-shared.js +31 -0
- package/dist/mcp/tools/changeset-shared.js.map +7 -0
- package/dist/mcp/tools/changeset-show.js +55 -0
- package/dist/mcp/tools/changeset-show.js.map +7 -0
- package/dist/mcp/tools/changeset-verify.js +43 -0
- package/dist/mcp/tools/changeset-verify.js.map +7 -0
- package/dist/mcp/tools/chat-launch.js +50 -0
- package/dist/mcp/tools/chat-launch.js.map +7 -0
- package/dist/mcp/tools/chat-status.js +26 -0
- package/dist/mcp/tools/chat-status.js.map +7 -0
- package/dist/mcp/tools/index.js +65 -0
- package/dist/mcp/tools/index.js.map +7 -0
- package/dist/mcp/tools/model-add.js +107 -0
- package/dist/mcp/tools/model-add.js.map +7 -0
- package/dist/mcp/tools/model-delete.js +99 -0
- package/dist/mcp/tools/model-delete.js.map +7 -0
- package/dist/mcp/tools/model-export.js +72 -0
- package/dist/mcp/tools/model-export.js.map +7 -0
- package/dist/mcp/tools/model-info.js +51 -0
- package/dist/mcp/tools/model-info.js.map +7 -0
- package/dist/mcp/tools/model-list.js +53 -0
- package/dist/mcp/tools/model-list.js.map +7 -0
- package/dist/mcp/tools/model-reload.js +34 -0
- package/dist/mcp/tools/model-reload.js.map +7 -0
- package/dist/mcp/tools/model-search.js +102 -0
- package/dist/mcp/tools/model-search.js.map +7 -0
- package/dist/mcp/tools/model-show.js +68 -0
- package/dist/mcp/tools/model-show.js.map +7 -0
- package/dist/mcp/tools/model-stats.js +22 -0
- package/dist/mcp/tools/model-stats.js.map +7 -0
- package/dist/mcp/tools/model-trace.js +118 -0
- package/dist/mcp/tools/model-trace.js.map +7 -0
- package/dist/mcp/tools/model-update.js +121 -0
- package/dist/mcp/tools/model-update.js.map +7 -0
- package/dist/mcp/tools/model-validate.js +78 -0
- package/dist/mcp/tools/model-validate.js.map +7 -0
- package/dist/mcp/tools/relationship-tools.js +98 -0
- package/dist/mcp/tools/relationship-tools.js.map +7 -0
- package/dist/mcp/tools/shared.js +126 -0
- package/dist/mcp/tools/shared.js.map +7 -0
- package/dist/mcp/tools/spec-type.js +90 -0
- package/dist/mcp/tools/spec-type.js.map +7 -0
- package/dist/reports/model-layer-report-generator.js +5 -3
- package/dist/reports/model-layer-report-generator.js.map +2 -2
- package/dist/reports/model-readme-generator.js +116 -0
- package/dist/reports/model-readme-generator.js.map +7 -0
- package/dist/reports/model-report-data.js +37 -1
- package/dist/reports/model-report-data.js.map +2 -2
- package/dist/reports/model-report-orchestrator.js +29 -6
- package/dist/reports/model-report-orchestrator.js.map +2 -2
- package/dist/reports/model-report-utils.js +9 -0
- package/dist/reports/model-report-utils.js.map +7 -0
- package/dist/schemas/bundled/analyzers/cbm.json +1186 -68
- package/dist/schemas/bundled/analyzers/manifest.json +2 -2
- package/dist/schemas/bundled/api.json +1029 -1658
- package/dist/schemas/bundled/apm.json +499 -734
- package/dist/schemas/bundled/application.json +745 -370
- package/dist/schemas/bundled/base.json +3 -220
- package/dist/schemas/bundled/business.json +452 -366
- package/dist/schemas/bundled/data-model.json +403 -383
- package/dist/schemas/bundled/data-store.json +334 -558
- package/dist/schemas/bundled/manifest.json +18 -18
- package/dist/schemas/bundled/motivation.json +349 -368
- package/dist/schemas/bundled/navigation.json +415 -731
- package/dist/schemas/bundled/product.json +325 -159
- package/dist/schemas/bundled/security.json +864 -1232
- package/dist/schemas/bundled/technology.json +574 -703
- package/dist/schemas/bundled/testing.json +718 -1643
- package/dist/schemas/bundled/ux.json +739 -1352
- package/dist/server/schemas.js +8 -0
- package/dist/server/schemas.js.map +2 -2
- package/dist/server/server.js +234 -31
- package/dist/server/server.js.map +2 -2
- package/dist/server-entry.js +2 -1
- package/dist/server-entry.js.map +2 -2
- package/dist/telemetry/config.js +2 -40
- package/dist/telemetry/config.js.map +2 -2
- package/dist/telemetry/index.js +1 -1
- package/dist/types/index.js.map +2 -2
- package/dist/utils/ansi-suppressor.js +23 -0
- package/dist/utils/ansi-suppressor.js.map +7 -0
- package/dist/utils/attribute-patch.js +41 -0
- package/dist/utils/attribute-patch.js.map +7 -0
- package/dist/utils/color-utils.js +34 -0
- package/dist/utils/color-utils.js.map +7 -0
- package/dist/utils/element-reference-shape.js +15 -1
- package/dist/utils/element-reference-shape.js.map +3 -3
- package/dist/utils/error-hints.js +29 -0
- package/dist/utils/error-hints.js.map +7 -0
- package/dist/utils/errors.js +75 -10
- package/dist/utils/errors.js.map +2 -2
- package/dist/utils/globals.js +17 -1
- package/dist/utils/globals.js.map +2 -2
- package/dist/utils/project-paths.js +50 -3
- package/dist/utils/project-paths.js.map +2 -2
- package/dist/utils/reference-path-parser.js +49 -0
- package/dist/utils/reference-path-parser.js.map +7 -0
- package/dist/utils/source-reference.js +17 -10
- package/dist/utils/source-reference.js.map +2 -2
- package/dist/utils/spec-version.js +10 -2
- package/dist/utils/spec-version.js.map +2 -2
- package/dist/validators/composed-reference-validator.js +240 -0
- package/dist/validators/composed-reference-validator.js.map +7 -0
- package/dist/validators/reference-validator.js +57 -13
- package/dist/validators/reference-validator.js.map +3 -3
- package/dist/validators/relationship-schema-validator.js +33 -5
- package/dist/validators/relationship-schema-validator.js.map +3 -3
- package/dist/validators/schema-validator.js +27 -9
- package/dist/validators/schema-validator.js.map +2 -2
- package/dist/validators/types.js.map +1 -1
- package/dist/viewer/README.md +6 -6
- package/dist/viewer/assets/main-CxzcuU_o.js +84 -0
- package/dist/viewer/assets/main-j-7ULYpm.css +1 -0
- package/dist/viewer/index.html +2 -2
- package/dist/viewer/manifest.json +10 -10
- package/dist/viewer/version.json +1 -1
- package/package.json +7 -3
- package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
- package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"specVersion": "0.
|
|
2
|
+
"specVersion": "0.11.0",
|
|
3
3
|
"layer": {
|
|
4
4
|
"id": "api",
|
|
5
5
|
"number": 7,
|
|
6
6
|
"name": "API Layer",
|
|
7
|
-
"description": "
|
|
7
|
+
"description": "Describes the HTTP API surface the application exposes or consumes: the API document and its servers, paths and operations, parameters, request bodies and responses, media types, headers, links and callbacks, reusable components and schemas, security schemes and webhooks (OpenAPI 3.0). Route handlers, controllers and generated API clients are evidence for elements here; the application behaviour behind an operation belongs to the application layer. Modelling rules: each API object links only to what its OpenAPI 3.0 fields hold, and every nesting in the document tree is composes: the document composes its info, paths, components, servers and tags; paths compose path items, and a path item composes its operations, parameters and servers; an operation composes its parameters, request body, responses map, callbacks and servers; the responses map composes its responses, and a response composes its headers, media types and links; a media type composes its schema, examples and encodings; a server composes its variables, a security scheme its OAuth flows, and components their reusable entries. Reuse through $ref is references, and allOf inheritance is specializes. A rate limit, which OpenAPI does not define, governs the operations, path items and servers it caps, triggers its 429 response, references the headers and security scheme it counts by, and realizes its countermeasure. An operation realizes the application function it exposes and references its application service, and a document realizes its application service; the API reaches the business layer through the application layer. A security scheme realizes the security policy it applies, requires permissions and references the secure resource it protects. API schemas reach data stores and business objects through the data-model schemas that map to them. An operation satisfies requirements and constraints, supports the goals and outcomes it contributes to, and realizes the countermeasures it implements.",
|
|
8
8
|
"inspired_by": {
|
|
9
9
|
"standard": "OpenAPI 3.0",
|
|
10
10
|
"version": "3.0",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"callback": {
|
|
45
45
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
46
46
|
"title": "Callback",
|
|
47
|
-
"description": "
|
|
47
|
+
"description": "An outbound HTTP request contract attached to an operation, in which the API itself calls a consumer-supplied URL. The URL is obtained by evaluating a runtime expression against the triggering request or response, and the full interaction (method, body, expected responses) is described as a PathItem. Use Operation instead when the HTTP interaction is one the API receives and serves on its own paths, rather than a request the API sends to a URL supplied by the consumer. Use Link instead when the relationship describes a follow-up call that the client makes to another operation of this API, using values from a response, rather than a call the API pushes to the client. Use PathItem instead when modelling the set of HTTP methods under a fixed path template of the API, or the inner PathItem that a callback aggregates, rather than the expression-keyed callback wrapper. Use Server instead when the target is a fixed or variable-templated deployment base URL of the API, not a URL resolved per request from a runtime expression.",
|
|
48
48
|
"allOf": [
|
|
49
49
|
{
|
|
50
50
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -71,12 +71,24 @@
|
|
|
71
71
|
"additionalProperties": false
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
|
+
"x-dr-standard": "OpenAPI 3.0 Callback Object (Operation.callbacks; Runtime Expressions)",
|
|
75
|
+
"x-dr-evidence": [
|
|
76
|
+
"A 'callbacks:' map under an operation in an OpenAPI YAML/JSON file whose keys are runtime expressions such as '{$request.body#/callbackUrl}'.",
|
|
77
|
+
"A route decorator or annotation declaring callbacks, such as FastAPI's callbacks= router parameter or springdoc/Swagger @Callback, on a subscription or job-submission endpoint.",
|
|
78
|
+
"Handler code that stores a callbackUrl/notifyUrl field from the incoming request and later issues an HTTP POST to it from a background job or event listener using an HTTP client."
|
|
79
|
+
],
|
|
80
|
+
"x-dr-distinguish": {
|
|
81
|
+
"api.operation": "the HTTP interaction is one the API receives and serves on its own paths, rather than a request the API sends to a URL supplied by the consumer.",
|
|
82
|
+
"api.link": "the relationship describes a follow-up call that the client makes to another operation of this API, using values from a response, rather than a call the API pushes to the client.",
|
|
83
|
+
"api.pathitem": "modelling the set of HTTP methods under a fixed path template of the API, or the inner PathItem that a callback aggregates, rather than the expression-keyed callback wrapper.",
|
|
84
|
+
"api.server": "the target is a fixed or variable-templated deployment base URL of the API, not a URL resolved per request from a runtime expression."
|
|
85
|
+
},
|
|
74
86
|
"$id": "urn:dr:spec:node:api.callback"
|
|
75
87
|
},
|
|
76
88
|
"components": {
|
|
77
89
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
78
90
|
"title": "Components",
|
|
79
|
-
"description": "
|
|
91
|
+
"description": "The single container object within an OpenAPI document that holds named, reusable definitions (schemas, responses, parameters, examples, request bodies, headers, security schemes, links and callbacks), each addressable by a '#/components/<kind>/<name>' $ref pointer. It defines no paths or operations itself; its entries take effect only when referenced. Use OpenAPIDocument instead when the element is the root object carrying openapi, info, paths and servers, of which the components section is only one child. Use Schema instead when the element is an individual data-shape definition, whether inline or stored under components.schemas, rather than the registry that holds it. Use Responses instead when the element is an operation's map of HTTP status codes to Response objects, not the components.responses registry of named reusable responses. Use Paths instead when the element maps URL path templates to PathItem objects that define live API surface, rather than holding unreferenced reusable definitions.",
|
|
80
92
|
"allOf": [
|
|
81
93
|
{
|
|
82
94
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -98,12 +110,24 @@
|
|
|
98
110
|
"additionalProperties": false
|
|
99
111
|
}
|
|
100
112
|
},
|
|
113
|
+
"x-dr-standard": "OpenAPI 3.0 Components Object",
|
|
114
|
+
"x-dr-evidence": [
|
|
115
|
+
"A top-level 'components:' key in an openapi.yaml/openapi.json with sub-maps such as schemas, securitySchemes, parameters or responses",
|
|
116
|
+
"JSON Reference strings of the form \"$ref: '#/components/schemas/User'\" or '#/components/responses/NotFound' elsewhere in the spec",
|
|
117
|
+
"Programmatic spec builders populating the section, e.g. springdoc 'new OpenAPI().components(new Components().addSecuritySchemes(...))', NestJS DocumentBuilder().addBearerAuth(), or drf-spectacular/FastAPI registering models under components.schemas"
|
|
118
|
+
],
|
|
119
|
+
"x-dr-distinguish": {
|
|
120
|
+
"api.openapidocument": "the element is the root object carrying openapi, info, paths and servers, of which the components section is only one child.",
|
|
121
|
+
"api.schema": "the element is an individual data-shape definition, whether inline or stored under components.schemas, rather than the registry that holds it.",
|
|
122
|
+
"api.responses": "the element is an operation's map of HTTP status codes to Response objects, not the components.responses registry of named reusable responses.",
|
|
123
|
+
"api.paths": "the element maps URL path templates to PathItem objects that define live API surface, rather than holding unreferenced reusable definitions."
|
|
124
|
+
},
|
|
101
125
|
"$id": "urn:dr:spec:node:api.components"
|
|
102
126
|
},
|
|
103
127
|
"contact": {
|
|
104
128
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
105
129
|
"title": "Contact",
|
|
106
|
-
"description": "
|
|
130
|
+
"description": "A metadata object nested in an API document's Info section that identifies the person or organisation responsible for the exposed API by name, email address and/or URL. It describes who maintains the API contract, not the server it is deployed on or the documentation it links to. Use Info instead when the element carries the API's title, version, description or terms of service rather than only the maintainer's name, email and URL. Use ExternalDocumentation instead when the URL points to a guide, wiki or reference material for the API rather than to a support or maintainer contact page. Use License instead when the name and URL identify the legal licence terms under which the API is offered rather than the party to contact.",
|
|
107
131
|
"allOf": [
|
|
108
132
|
{
|
|
109
133
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -123,22 +147,35 @@
|
|
|
123
147
|
"type": "object",
|
|
124
148
|
"properties": {
|
|
125
149
|
"url": {
|
|
126
|
-
"type": "string"
|
|
150
|
+
"type": "string",
|
|
151
|
+
"description": "Absolute URL of the maintainer's support or contact page, e.g. https://example.com/support. Set it when consumers should reach the owner through a web page rather than, or as well as, by email."
|
|
127
152
|
},
|
|
128
153
|
"email": {
|
|
129
|
-
"type": "string"
|
|
154
|
+
"type": "string",
|
|
155
|
+
"description": "Email address of the contact person or team, in RFC 5322 mailbox format, e.g. api-team@example.com. Set it when there is a monitored mailbox for API support or questions."
|
|
130
156
|
}
|
|
131
157
|
},
|
|
132
158
|
"required": [],
|
|
133
159
|
"additionalProperties": false
|
|
134
160
|
}
|
|
135
161
|
},
|
|
162
|
+
"x-dr-standard": "OpenAPI 3.0 Contact Object",
|
|
163
|
+
"x-dr-evidence": [
|
|
164
|
+
"An info.contact block with name, email or url keys in an openapi.yaml or openapi.json file.",
|
|
165
|
+
"A framework OpenAPI configuration passing a contact argument, e.g. FastAPI(contact={...}), Springdoc new Contact().name(...).email(...), or a swagger-jsdoc definition.info.contact entry.",
|
|
166
|
+
"An @contact or @Contact annotation or docblock tag in API annotations, such as swag's // @contact.email comment or the MicroProfile @Contact(...) annotation inside @Info."
|
|
167
|
+
],
|
|
168
|
+
"x-dr-distinguish": {
|
|
169
|
+
"api.info": "the element carries the API's title, version, description or terms of service rather than only the maintainer's name, email and URL.",
|
|
170
|
+
"api.externaldocumentation": "the URL points to a guide, wiki or reference material for the API rather than to a support or maintainer contact page.",
|
|
171
|
+
"api.license": "the name and URL identify the legal licence terms under which the API is offered rather than the party to contact."
|
|
172
|
+
},
|
|
136
173
|
"$id": "urn:dr:spec:node:api.contact"
|
|
137
174
|
},
|
|
138
175
|
"encoding": {
|
|
139
176
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
140
177
|
"title": "Encoding",
|
|
141
|
-
"description": "
|
|
178
|
+
"description": "A per-property serialization rule inside a request body's MediaType, keyed by a top-level schema property name, that fixes how that property is written as a part of a multipart or application/x-www-form-urlencoded body: its part Content-Type, part headers, and form style/explode/allowReserved behaviour. Use MediaType instead when the element describes the whole body for one MIME type (schema, examples, and the encoding map itself) rather than the rule for one property within it. Use Header instead when the element is an individual header definition (schema, required, description) that a multipart part or response carries, not the part-level serialization rule that lists those headers. Use Schema instead when the element defines the data shape or type of the property (type, format, properties) rather than how that property is serialized onto the wire. Use Parameter instead when the element is a path, query, header or cookie input to the operation rather than a property of a request body.",
|
|
142
179
|
"allOf": [
|
|
143
180
|
{
|
|
144
181
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -158,10 +195,12 @@
|
|
|
158
195
|
"type": "object",
|
|
159
196
|
"properties": {
|
|
160
197
|
"propertyName": {
|
|
161
|
-
"type": "string"
|
|
198
|
+
"type": "string",
|
|
199
|
+
"description": "Name of the top-level property in the MediaType's schema that this rule applies to (the map key in MediaType.encoding); it must match an existing schema property name exactly and should always be set."
|
|
162
200
|
},
|
|
163
201
|
"contentType": {
|
|
164
|
-
"type": "string"
|
|
202
|
+
"type": "string",
|
|
203
|
+
"description": "MIME type, or comma-separated list of MIME types or wildcards such as 'image/png, image/jpeg', for this part; set it only to override the default (application/octet-stream for binary strings, text/plain for primitives, application/json for objects)."
|
|
165
204
|
},
|
|
166
205
|
"style": {
|
|
167
206
|
"type": "string",
|
|
@@ -177,7 +216,8 @@
|
|
|
177
216
|
"description": "Serialization style for the encoding (only applicable to multipart/form-data and application/x-www-form-urlencoded)"
|
|
178
217
|
},
|
|
179
218
|
"explode": {
|
|
180
|
-
"type": "boolean"
|
|
219
|
+
"type": "boolean",
|
|
220
|
+
"description": "Boolean; when true, array or object values of this property are emitted as separate key=value pairs; defaults to true when style is 'form' and false otherwise, and is ignored unless the body is application/x-www-form-urlencoded."
|
|
181
221
|
},
|
|
182
222
|
"allowReserved": {
|
|
183
223
|
"type": "boolean",
|
|
@@ -188,12 +228,24 @@
|
|
|
188
228
|
"additionalProperties": false
|
|
189
229
|
}
|
|
190
230
|
},
|
|
231
|
+
"x-dr-standard": "OpenAPI 3.0 Encoding Object (MediaType Object 'encoding' field)",
|
|
232
|
+
"x-dr-evidence": [
|
|
233
|
+
"An OpenAPI YAML/JSON fragment with an 'encoding:' map under 'requestBody.content.multipart/form-data' or 'application/x-www-form-urlencoded', keyed by property names such as 'profileImage: { contentType: image/png }'.",
|
|
234
|
+
"A springdoc/swagger-core @Encoding(name=..., contentType=...) annotation nested in @Content on a controller method that consumes multipart/form-data, e.g. alongside @RequestPart parameters.",
|
|
235
|
+
"Upload handler code that declares per-field part content types or headers, e.g. FastAPI File/Form fields with media_type, or a multer/busboy field configuration whose field names match properties of the request body schema."
|
|
236
|
+
],
|
|
237
|
+
"x-dr-distinguish": {
|
|
238
|
+
"api.mediatype": "the element describes the whole body for one MIME type (schema, examples, and the encoding map itself) rather than the rule for one property within it.",
|
|
239
|
+
"api.header": "the element is an individual header definition (schema, required, description) that a multipart part or response carries, not the part-level serialization rule that lists those headers.",
|
|
240
|
+
"api.schema": "the element defines the data shape or type of the property (type, format, properties) rather than how that property is serialized onto the wire.",
|
|
241
|
+
"api.parameter": "the element is a path, query, header or cookie input to the operation rather than a property of a request body."
|
|
242
|
+
},
|
|
191
243
|
"$id": "urn:dr:spec:node:api.encoding"
|
|
192
244
|
},
|
|
193
245
|
"example": {
|
|
194
246
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
195
247
|
"title": "Example",
|
|
196
|
-
"description": "
|
|
248
|
+
"description": "A named sample instance of a value, given either inline or by external URL, attached through an `examples` map to a media type, parameter or header, or registered under components.examples for $ref reuse. It illustrates one concrete payload or value. It does not define the shape or constraints of that value. Use Schema instead when the element defines the type, properties and constraints a value must satisfy rather than one concrete sample of it. Use MediaType instead when the element is the MIME-keyed content entry itself; a single inline `example` value on that media type is an attribute of it, not a separate Example. Use ExternalDocumentation instead when the URL points to explanatory prose such as a guide or wiki rather than to a sample payload or value. Use Components instead when the element is the reusable registry holding examples rather than one named example entry within it.",
|
|
197
249
|
"allOf": [
|
|
198
250
|
{
|
|
199
251
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -213,10 +265,12 @@
|
|
|
213
265
|
"type": "object",
|
|
214
266
|
"properties": {
|
|
215
267
|
"summary": {
|
|
216
|
-
"type": "string"
|
|
268
|
+
"type": "string",
|
|
269
|
+
"description": "Short plain-text label for the example, typically shown as its title in documentation tools; set it whenever several examples sit side by side so readers can tell them apart."
|
|
217
270
|
},
|
|
218
271
|
"description": {
|
|
219
|
-
"type": "string"
|
|
272
|
+
"type": "string",
|
|
273
|
+
"description": "Longer explanation of the scenario the example illustrates, written in CommonMark per OpenAPI 3.0; set it when the value's purpose or preconditions are not obvious from the summary."
|
|
220
274
|
},
|
|
221
275
|
"value": {
|
|
222
276
|
"type": "string",
|
|
@@ -231,12 +285,24 @@
|
|
|
231
285
|
"additionalProperties": false
|
|
232
286
|
}
|
|
233
287
|
},
|
|
288
|
+
"x-dr-standard": "OpenAPI 3.0 Example Object",
|
|
289
|
+
"x-dr-evidence": [
|
|
290
|
+
"An entry in an `examples:` map under `content.application/json`, a parameter or a header in an openapi.yaml/json file, carrying `summary` and `value` or `externalValue` keys.",
|
|
291
|
+
"A `components.examples` entry referenced elsewhere via `$ref: '#/components/examples/<Name>'`.",
|
|
292
|
+
"Framework annotations that emit named examples, e.g. springdoc `@ExampleObject(name=..., value=...)`, FastAPI `Body(openapi_examples={...})`, NestJS `@ApiBody({ examples: {...} })` or swagger-php `@OA\\Examples`."
|
|
293
|
+
],
|
|
294
|
+
"x-dr-distinguish": {
|
|
295
|
+
"api.schema": "the element defines the type, properties and constraints a value must satisfy rather than one concrete sample of it.",
|
|
296
|
+
"api.mediatype": "the element is the MIME-keyed content entry itself; a single inline `example` value on that media type is an attribute of it, not a separate Example.",
|
|
297
|
+
"api.externaldocumentation": "the URL points to explanatory prose such as a guide or wiki rather than to a sample payload or value.",
|
|
298
|
+
"api.components": "the element is the reusable registry holding examples rather than one named example entry within it."
|
|
299
|
+
},
|
|
234
300
|
"$id": "urn:dr:spec:node:api.example"
|
|
235
301
|
},
|
|
236
302
|
"externaldocumentation": {
|
|
237
303
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
238
304
|
"title": "ExternalDocumentation",
|
|
239
|
-
"description": "A
|
|
305
|
+
"description": "A metadata object holding a single URL (plus optional descriptive text) that points to documentation hosted outside the OpenAPI document. It attaches through an 'externalDocs' field to the root document, a Tag, an Operation or a Schema. Use Contact instead when the URL or email identifies a person or team to reach for support, not a documentation resource. Use License instead when the URL points to the legal license terms under which the API is offered. Use Info instead when the text is the API's own inline title, description or termsOfService rather than a link to an outside documentation page. Use Example instead when the URL (externalValue) points to a sample payload value rather than to human-readable documentation.",
|
|
240
306
|
"allOf": [
|
|
241
307
|
{
|
|
242
308
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -256,22 +322,36 @@
|
|
|
256
322
|
"type": "object",
|
|
257
323
|
"properties": {
|
|
258
324
|
"description": {
|
|
259
|
-
"type": "string"
|
|
325
|
+
"type": "string",
|
|
326
|
+
"description": "Short CommonMark-capable text describing what the linked documentation covers; set it when the URL alone does not make the target's purpose clear."
|
|
260
327
|
},
|
|
261
328
|
"url": {
|
|
262
|
-
"type": "string"
|
|
329
|
+
"type": "string",
|
|
330
|
+
"description": "Absolute URL of the external documentation resource (e.g. https://docs.example.com/guide), always required."
|
|
263
331
|
}
|
|
264
332
|
},
|
|
265
333
|
"required": ["url"],
|
|
266
334
|
"additionalProperties": false
|
|
267
335
|
}
|
|
268
336
|
},
|
|
337
|
+
"x-dr-standard": "OpenAPI 3.0 External Documentation Object",
|
|
338
|
+
"x-dr-evidence": [
|
|
339
|
+
"an 'externalDocs:' block containing a 'url:' key in an openapi.yaml/json file, at root level, under a tag, an operation or a schema",
|
|
340
|
+
"a springdoc/swagger-core @ExternalDocumentation(url=...) or @ExternalDocs annotation on a controller method, OpenAPIDefinition or model class",
|
|
341
|
+
"a NestJS DocumentBuilder().setExternalDoc(description, url) call, or a FastAPI openapi_tags entry with an 'externalDocs' dict"
|
|
342
|
+
],
|
|
343
|
+
"x-dr-distinguish": {
|
|
344
|
+
"api.contact": "the URL or email identifies a person or team to reach for support, not a documentation resource.",
|
|
345
|
+
"api.license": "the URL points to the legal license terms under which the API is offered.",
|
|
346
|
+
"api.info": "the text is the API's own inline title, description or termsOfService rather than a link to an outside documentation page.",
|
|
347
|
+
"api.example": "the URL (externalValue) points to a sample payload value rather than to human-readable documentation."
|
|
348
|
+
},
|
|
269
349
|
"$id": "urn:dr:spec:node:api.externaldocumentation"
|
|
270
350
|
},
|
|
271
351
|
"header": {
|
|
272
352
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
273
353
|
"title": "Header",
|
|
274
|
-
"description": "
|
|
354
|
+
"description": "A named HTTP header declaration, keyed by header name in a Response's headers map, an Encoding's headers map, or the Components headers registry, that describes the header value's schema, serialization and examples. It carries no 'name' or 'in' field because the name comes from the map key and the location is always header. Use Parameter instead when the header is a client-supplied input to an operation, declared in the operation's or path's parameters list with in: header. Use SecurityScheme instead when the header carries credentials (e.g. Authorization, X-API-Key) and what is being modelled is the authentication mechanism, i.e. an apiKey scheme with in: header or an http bearer scheme. Use RateLimit instead when what is being modelled is the throttling policy itself (request count, window, scope), not the X-RateLimit-* response header that reports it. Use Encoding instead when the intent is to set the MIME type of a multipart part; use Encoding.contentType rather than a Content-Type header, which OpenAPI ignores.",
|
|
275
355
|
"allOf": [
|
|
276
356
|
{
|
|
277
357
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -291,13 +371,16 @@
|
|
|
291
371
|
"type": "object",
|
|
292
372
|
"properties": {
|
|
293
373
|
"description": {
|
|
294
|
-
"type": "string"
|
|
374
|
+
"type": "string",
|
|
375
|
+
"description": "Human-readable explanation of the header's meaning and value format, in CommonMark; set it whenever the header's purpose is not obvious from its name."
|
|
295
376
|
},
|
|
296
377
|
"required": {
|
|
297
|
-
"type": "boolean"
|
|
378
|
+
"type": "boolean",
|
|
379
|
+
"description": "Boolean stating whether the header is always present in the enclosing response or multipart part. Defaults to false; set true only when the header is guaranteed to be sent."
|
|
298
380
|
},
|
|
299
381
|
"deprecated": {
|
|
300
|
-
"type": "boolean"
|
|
382
|
+
"type": "boolean",
|
|
383
|
+
"description": "Boolean marking the header as deprecated so consumers stop relying on it. Defaults to false; set true when the header is scheduled for removal."
|
|
301
384
|
},
|
|
302
385
|
"schema": {
|
|
303
386
|
"type": "object",
|
|
@@ -339,12 +422,24 @@
|
|
|
339
422
|
"additionalProperties": false
|
|
340
423
|
}
|
|
341
424
|
},
|
|
425
|
+
"x-dr-standard": "OpenAPI 3.0 Header Object",
|
|
426
|
+
"x-dr-evidence": [
|
|
427
|
+
"An OpenAPI YAML/JSON 'headers:' map under a response (e.g. responses.200.headers.X-Request-Id with a schema) or an entry under components.headers.",
|
|
428
|
+
"A springdoc/swagger annotation such as @ApiResponse(headers = @Header(name = \"X-Rate-Limit-Remaining\", schema = @Schema(type = \"integer\"))), or a FastAPI/NestJS responses= declaration with a 'headers' dict.",
|
|
429
|
+
"A route handler that sets a fixed response header (e.g. res.setHeader('Location', ...) or response.headers['ETag'] = ...) whose value is documented as part of the response contract."
|
|
430
|
+
],
|
|
431
|
+
"x-dr-distinguish": {
|
|
432
|
+
"api.parameter": "the header is a client-supplied input to an operation, declared in the operation's or path's parameters list with in: header.",
|
|
433
|
+
"api.securityscheme": "the header carries credentials (e.g. Authorization, X-API-Key) and what is being modelled is the authentication mechanism, i.e. an apiKey scheme with in: header or an http bearer scheme.",
|
|
434
|
+
"api.ratelimit": "what is being modelled is the throttling policy itself (request count, window, scope), not the X-RateLimit-* response header that reports it.",
|
|
435
|
+
"api.encoding": "the intent is to set the MIME type of a multipart part; use Encoding.contentType rather than a Content-Type header, which OpenAPI ignores."
|
|
436
|
+
},
|
|
342
437
|
"$id": "urn:dr:spec:node:api.header"
|
|
343
438
|
},
|
|
344
439
|
"info": {
|
|
345
440
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
346
441
|
"title": "Info",
|
|
347
|
-
"description": "
|
|
442
|
+
"description": "A single metadata object nested in an OpenAPI document's root 'info' field that records the described API's title, its document version, an optional description and terms-of-service URL, and references to its contact and license. Exactly one exists per OpenAPI document; it describes the API as a whole, not any path, operation or server. Use OpenAPIDocument instead when the element is the root object itself, which holds the 'openapi' spec-version string and the paths, servers, components and security sections, rather than only the descriptive metadata block. Use Contact instead when the element carries only the maintainer's name, email or URL, which Info references through its 'contact' field. Use License instead when the element carries only the license name and license URL, which Info references through its 'license' field. Use ExternalDocumentation instead when the element is a link to an external guide or wiki attached to the root document, a tag, an operation or a schema, rather than inline title and version metadata.",
|
|
348
443
|
"allOf": [
|
|
349
444
|
{
|
|
350
445
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -364,17 +459,20 @@
|
|
|
364
459
|
"type": "object",
|
|
365
460
|
"properties": {
|
|
366
461
|
"title": {
|
|
367
|
-
"type": "string"
|
|
462
|
+
"type": "string",
|
|
463
|
+
"description": "Human-readable name of the API as shown in documentation portals and gateways (e.g. 'Taxonomy Service API'); always set, since OpenAPI 3.0 requires it."
|
|
368
464
|
},
|
|
369
465
|
"description": {
|
|
370
466
|
"type": "string",
|
|
371
467
|
"description": "Supports CommonMark (Markdown) syntax per OpenAPI 3.0."
|
|
372
468
|
},
|
|
373
469
|
"version": {
|
|
374
|
-
"type": "string"
|
|
470
|
+
"type": "string",
|
|
471
|
+
"description": "Version string of the API definition document (e.g. '1.4.0' or '2024-05-01'), distinct from the OpenAPI specification version held in OpenAPIDocument.openapi; always set, since OpenAPI 3.0 requires it."
|
|
375
472
|
},
|
|
376
473
|
"termsOfService": {
|
|
377
|
-
"type": "string"
|
|
474
|
+
"type": "string",
|
|
475
|
+
"description": "URL of the API's terms of service, which must be a valid URL per OpenAPI 3.0; set only when the API publishes usage terms."
|
|
378
476
|
},
|
|
379
477
|
"contact": {
|
|
380
478
|
"type": "string",
|
|
@@ -389,12 +487,24 @@
|
|
|
389
487
|
"additionalProperties": false
|
|
390
488
|
}
|
|
391
489
|
},
|
|
490
|
+
"x-dr-standard": "OpenAPI 3.0 Info Object",
|
|
491
|
+
"x-dr-evidence": [
|
|
492
|
+
"An 'info:' block containing 'title:' and 'version:' keys at the top level of an openapi.yaml or openapi.json file",
|
|
493
|
+
"A framework OpenAPI bootstrap call that sets API metadata, such as FastAPI(title=..., version=..., description=...), NestJS new DocumentBuilder().setTitle().setVersion(), or springdoc new OpenAPI().info(new Info().title(...))",
|
|
494
|
+
"A Java annotation @OpenAPIDefinition(info = @Info(title = ..., version = ...)), or a swagger-jsdoc options object with definition.info.title and definition.info.version"
|
|
495
|
+
],
|
|
496
|
+
"x-dr-distinguish": {
|
|
497
|
+
"api.openapidocument": "the element is the root object itself, which holds the 'openapi' spec-version string and the paths, servers, components and security sections, rather than only the descriptive metadata block",
|
|
498
|
+
"api.contact": "the element carries only the maintainer's name, email or URL, which Info references through its 'contact' field",
|
|
499
|
+
"api.license": "the element carries only the license name and license URL, which Info references through its 'license' field",
|
|
500
|
+
"api.externaldocumentation": "the element is a link to an external guide or wiki attached to the root document, a tag, an operation or a schema, rather than inline title and version metadata"
|
|
501
|
+
},
|
|
392
502
|
"$id": "urn:dr:spec:node:api.info"
|
|
393
503
|
},
|
|
394
504
|
"license": {
|
|
395
505
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
396
506
|
"title": "License",
|
|
397
|
-
"description": "
|
|
507
|
+
"description": "A metadata object, nested under an API's Info object, that identifies by name the legal license governing use of the API and optionally gives a URL to the full license text. It describes terms of use for the API contract itself, not the license of the implementing source code. Use Info instead when the element is the overall API metadata block (title, version, description, termsOfService) rather than only the license name and URL inside it. Use ExternalDocumentation instead when the URL points to guides, wikis or reference docs that explain the API rather than to the legal license terms. Use Contact instead when the information identifies who owns or supports the API (name, email, URL) rather than the legal terms under which it may be used.",
|
|
398
508
|
"allOf": [
|
|
399
509
|
{
|
|
400
510
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -414,19 +524,31 @@
|
|
|
414
524
|
"type": "object",
|
|
415
525
|
"properties": {
|
|
416
526
|
"url": {
|
|
417
|
-
"type": "string"
|
|
527
|
+
"type": "string",
|
|
528
|
+
"description": "Absolute URL (OpenAPI 3.0 requires URL format) pointing to the full text of the license; set it whenever the license terms are published at a resolvable location."
|
|
418
529
|
}
|
|
419
530
|
},
|
|
420
|
-
"required": [
|
|
531
|
+
"required": [],
|
|
421
532
|
"additionalProperties": false
|
|
422
533
|
}
|
|
423
534
|
},
|
|
535
|
+
"x-dr-standard": "OpenAPI 3.0 License Object",
|
|
536
|
+
"x-dr-evidence": [
|
|
537
|
+
"an info.license block with name (e.g. 'Apache 2.0', 'MIT') and url fields in an openapi.yaml/openapi.json file",
|
|
538
|
+
"a framework OpenAPI config call setting license metadata, e.g. springdoc new License().name(\"Apache 2.0\").url(...), FastAPI(license_info={...}) or swagger-jsdoc definition.info.license",
|
|
539
|
+
"an @OpenAPIDefinition(info = @Info(license = @License(name=..., url=...))) or equivalent annotation on an application or config class"
|
|
540
|
+
],
|
|
541
|
+
"x-dr-distinguish": {
|
|
542
|
+
"api.info": "the element is the overall API metadata block (title, version, description, termsOfService) rather than only the license name and URL inside it.",
|
|
543
|
+
"api.externaldocumentation": "the URL points to guides, wikis or reference docs that explain the API rather than to the legal license terms.",
|
|
544
|
+
"api.contact": "the information identifies who owns or supports the API (name, email, URL) rather than the legal terms under which it may be used."
|
|
545
|
+
},
|
|
424
546
|
"$id": "urn:dr:spec:node:api.license"
|
|
425
547
|
},
|
|
426
548
|
"link": {
|
|
427
549
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
428
550
|
"title": "Link",
|
|
429
|
-
"description": "
|
|
551
|
+
"description": "A response-scoped descriptor that names a target operation, by operationId or operationRef, and maps values from the current response or request (via runtime expressions or literals) onto that operation's parameters or request body. It is a design-time statement of how one call can follow another. It is not a hyperlink carried in the response payload. Use Callback instead when the API itself sends an outbound request to a consumer-supplied URL, rather than describing a follow-up call the consumer may make to an operation in this API. Use Schema instead when the 'links' are runtime data inside the response body (e.g. HAL _links, JSON:API links objects) whose shape is being described, not an OpenAPI Link Object. Use Header instead when the relationship is conveyed by an actual HTTP Link response header (RFC 8288) declared on the response. Use Parameter instead when you are defining the input the target operation accepts, rather than mapping a value from a prior response into that input.",
|
|
430
552
|
"allOf": [
|
|
431
553
|
{
|
|
432
554
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -454,7 +576,8 @@
|
|
|
454
576
|
"description": "A relative or absolute URL reference to an operation. Mutually exclusive with 'operationId' — only one may be specified per Link."
|
|
455
577
|
},
|
|
456
578
|
"description": {
|
|
457
|
-
"type": "string"
|
|
579
|
+
"type": "string",
|
|
580
|
+
"description": "Human-readable explanation of the link's purpose and when a client should follow it; CommonMark is allowed, and it should be set whenever the target or parameter mapping is not self-evident."
|
|
458
581
|
},
|
|
459
582
|
"parameters": {
|
|
460
583
|
"type": "object",
|
|
@@ -469,12 +592,24 @@
|
|
|
469
592
|
"additionalProperties": false
|
|
470
593
|
}
|
|
471
594
|
},
|
|
595
|
+
"x-dr-standard": "OpenAPI 3.0 Link Object",
|
|
596
|
+
"x-dr-evidence": [
|
|
597
|
+
"A 'links:' map under a response in an OpenAPI YAML/JSON file whose entries carry operationId or operationRef plus parameters using runtime expressions such as '$response.body#/id'",
|
|
598
|
+
"A springdoc/swagger-core @Link annotation inside @ApiResponse(links = ...), or a swagger-php @OA\\Link / NestJS equivalent attached to a response definition",
|
|
599
|
+
"Entries under components.links referenced from responses via $ref '#/components/links/<Name>'"
|
|
600
|
+
],
|
|
601
|
+
"x-dr-distinguish": {
|
|
602
|
+
"api.callback": "the API itself sends an outbound request to a consumer-supplied URL, rather than describing a follow-up call the consumer may make to an operation in this API",
|
|
603
|
+
"api.schema": "the 'links' are runtime data inside the response body (e.g. HAL _links, JSON:API links objects) whose shape is being described, not an OpenAPI Link Object",
|
|
604
|
+
"api.header": "the relationship is conveyed by an actual HTTP Link response header (RFC 8288) declared on the response",
|
|
605
|
+
"api.parameter": "you are defining the input the target operation accepts, rather than mapping a value from a prior response into that input"
|
|
606
|
+
},
|
|
472
607
|
"$id": "urn:dr:spec:node:api.link"
|
|
473
608
|
},
|
|
474
609
|
"mediatype": {
|
|
475
610
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
476
611
|
"title": "MediaType",
|
|
477
|
-
"description": "
|
|
612
|
+
"description": "An entry in the 'content' map of a request body, response, or content-style parameter, keyed by one MIME type or media range (e.g. application/json, text/*), that binds the payload schema, examples, and (for multipart or form-urlencoded bodies) per-property encoding used when the payload has that type. Use Schema instead when the element is the data-shape definition itself (type, properties, items), independent of which MIME type carries it. Use Encoding instead when the element describes serialization of a single property within a multipart or form-urlencoded body rather than the whole payload for a MIME type. Use RequestBody instead when the element is the container holding the description, the required flag and the full content map across all MIME types for an operation's input. Use Response instead when the element is an outcome for a status code, with its description, headers and links, rather than one MIME-typed representation within it.",
|
|
478
613
|
"allOf": [
|
|
479
614
|
{
|
|
480
615
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -494,7 +629,8 @@
|
|
|
494
629
|
"type": "object",
|
|
495
630
|
"properties": {
|
|
496
631
|
"contentType": {
|
|
497
|
-
"type": "string"
|
|
632
|
+
"type": "string",
|
|
633
|
+
"description": "The media type or media range string that keys this entry in the parent content map, per RFC 6838 (e.g. 'application/json', 'text/*', 'application/vnd.acme+json'); always set it, and keep it unique within the parent's content map."
|
|
498
634
|
},
|
|
499
635
|
"example": {
|
|
500
636
|
"type": "string",
|
|
@@ -505,12 +641,24 @@
|
|
|
505
641
|
"additionalProperties": false
|
|
506
642
|
}
|
|
507
643
|
},
|
|
644
|
+
"x-dr-standard": "OpenAPI 3.0 Media Type Object",
|
|
645
|
+
"x-dr-evidence": [
|
|
646
|
+
"An OpenAPI YAML/JSON 'content:' block under a requestBody or response with a key such as 'application/json' or 'multipart/form-data' carrying 'schema:' and 'example(s):'.",
|
|
647
|
+
"A framework annotation declaring a produced or consumed MIME type with a payload schema, e.g. Spring @Content(mediaType=\"application/json\", schema=@Schema(...)) or @Produces/@Consumes on a JAX-RS resource method.",
|
|
648
|
+
"FastAPI/NestJS response declarations naming a MIME type with a model, e.g. responses={200: {\"content\": {\"image/png\": {}}}} or @ApiProduces('text/csv') paired with @ApiResponse({type: Dto})."
|
|
649
|
+
],
|
|
650
|
+
"x-dr-distinguish": {
|
|
651
|
+
"api.schema": "the element is the data-shape definition itself (type, properties, items), independent of which MIME type carries it.",
|
|
652
|
+
"api.encoding": "the element describes serialization of a single property within a multipart or form-urlencoded body rather than the whole payload for a MIME type.",
|
|
653
|
+
"api.requestbody": "the element is the container holding the description, the required flag and the full content map across all MIME types for an operation's input.",
|
|
654
|
+
"api.response": "the element is an outcome for a status code, with its description, headers and links, rather than one MIME-typed representation within it."
|
|
655
|
+
},
|
|
508
656
|
"$id": "urn:dr:spec:node:api.mediatype"
|
|
509
657
|
},
|
|
510
658
|
"oauthflow": {
|
|
511
659
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
512
660
|
"title": "OAuthFlow",
|
|
513
|
-
"description": "
|
|
661
|
+
"description": "A configuration object describing one OAuth 2.0 grant type (implicit, password, clientCredentials or authorizationCode) within an oauth2 security scheme, giving the endpoint URLs that grant uses and the map of scopes it can issue. Its grant type is determined by the OAuthFlows field that holds it, not by a field of its own. Use OAuthFlows instead when the element is the container grouping all grant types for one oauth2 scheme (the 'flows' object) rather than the settings of a single grant. Use SecurityScheme instead when the element declares the authentication mechanism itself (type oauth2, apiKey, http, openIdConnect) and its registry name, rather than the URLs and scopes of one OAuth grant. Use Server instead when the URL is a base address where the API itself is deployed, not an authorization, token or refresh endpoint of an identity provider.",
|
|
514
662
|
"allOf": [
|
|
515
663
|
{
|
|
516
664
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -530,13 +678,16 @@
|
|
|
530
678
|
"type": "object",
|
|
531
679
|
"properties": {
|
|
532
680
|
"authorizationUrl": {
|
|
533
|
-
"type": "string"
|
|
681
|
+
"type": "string",
|
|
682
|
+
"description": "Absolute URL of the authorization endpoint where the user grants consent; required for implicit and authorizationCode flows and omitted for password and clientCredentials."
|
|
534
683
|
},
|
|
535
684
|
"tokenUrl": {
|
|
536
|
-
"type": "string"
|
|
685
|
+
"type": "string",
|
|
686
|
+
"description": "Absolute URL of the token endpoint that exchanges a grant or credentials for an access token; required for password, clientCredentials and authorizationCode flows and omitted for implicit."
|
|
537
687
|
},
|
|
538
688
|
"refreshUrl": {
|
|
539
|
-
"type": "string"
|
|
689
|
+
"type": "string",
|
|
690
|
+
"description": "Optional absolute URL of the endpoint used to obtain refreshed access tokens; set only when the provider issues refresh tokens via a distinct endpoint."
|
|
540
691
|
},
|
|
541
692
|
"scopes": {
|
|
542
693
|
"type": "object",
|
|
@@ -547,12 +698,23 @@
|
|
|
547
698
|
"additionalProperties": false
|
|
548
699
|
}
|
|
549
700
|
},
|
|
701
|
+
"x-dr-standard": "OpenAPI 3.0 OAuth Flow Object",
|
|
702
|
+
"x-dr-evidence": [
|
|
703
|
+
"An entry under components.securitySchemes.<name>.flows.authorizationCode (or implicit/password/clientCredentials) in an openapi.yaml containing authorizationUrl, tokenUrl and scopes keys",
|
|
704
|
+
"A framework security declaration such as FastAPI OAuth2PasswordBearer(tokenUrl=...)/OAuth2AuthorizationCodeBearer, springdoc @OAuthFlow(authorizationUrl=..., tokenUrl=..., scopes=@OAuthScope(...)), or NestJS addOAuth2({ flows: { ... } })",
|
|
705
|
+
"A scopes dictionary mapping scope strings (e.g. 'read:users') to descriptions, used in both the spec generator config and route-level scope checks"
|
|
706
|
+
],
|
|
707
|
+
"x-dr-distinguish": {
|
|
708
|
+
"api.oauthflows": "the element is the container grouping all grant types for one oauth2 scheme (the 'flows' object) rather than the settings of a single grant.",
|
|
709
|
+
"api.securityscheme": "the element declares the authentication mechanism itself (type oauth2, apiKey, http, openIdConnect) and its registry name, rather than the URLs and scopes of one OAuth grant.",
|
|
710
|
+
"api.server": "the URL is a base address where the API itself is deployed, not an authorization, token or refresh endpoint of an identity provider."
|
|
711
|
+
},
|
|
550
712
|
"$id": "urn:dr:spec:node:api.oauthflow"
|
|
551
713
|
},
|
|
552
714
|
"oauthflows": {
|
|
553
715
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
554
716
|
"title": "OAuthFlows",
|
|
555
|
-
"description": "
|
|
717
|
+
"description": "A container object nested in an oauth2-type SecurityScheme that maps each supported OAuth 2.0 grant type (implicit, password, clientCredentials, authorizationCode) to one OAuthFlow configuration. It holds no URLs or scopes of its own; it only selects which grant types the scheme offers. Use OAuthFlow instead when the element carries the authorizationUrl, tokenUrl, refreshUrl or scopes of a single grant type rather than the set of grant-type slots. Use SecurityScheme instead when the element declares the authentication mechanism itself (type, description, name/in, scheme) rather than the flows block inside an oauth2 scheme. Use Components instead when the element is the document-wide registry holding named securitySchemes, not the flows object within one scheme.",
|
|
556
718
|
"allOf": [
|
|
557
719
|
{
|
|
558
720
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -574,12 +736,23 @@
|
|
|
574
736
|
"additionalProperties": false
|
|
575
737
|
}
|
|
576
738
|
},
|
|
739
|
+
"x-dr-standard": "OpenAPI 3.0 OAuth Flows Object",
|
|
740
|
+
"x-dr-evidence": [
|
|
741
|
+
"A 'flows:' map with keys such as authorizationCode or clientCredentials under a securitySchemes entry whose type is oauth2 in openapi.yaml or openapi.json",
|
|
742
|
+
"A springdoc/swagger-annotations @OAuthFlows(...) passed as the flows argument of @SecurityScheme(type = SecuritySchemeType.OAUTH2)",
|
|
743
|
+
"A framework flows model instantiated for an OAuth2 scheme, e.g. FastAPI OAuthFlowsModel(password=...) or .NET Swashbuckle new OpenApiOAuthFlows { AuthorizationCode = ... }"
|
|
744
|
+
],
|
|
745
|
+
"x-dr-distinguish": {
|
|
746
|
+
"api.oauthflow": "the element carries the authorizationUrl, tokenUrl, refreshUrl or scopes of a single grant type rather than the set of grant-type slots.",
|
|
747
|
+
"api.securityscheme": "the element declares the authentication mechanism itself (type, description, name/in, scheme) rather than the flows block inside an oauth2 scheme.",
|
|
748
|
+
"api.components": "the element is the document-wide registry holding named securitySchemes, not the flows object within one scheme."
|
|
749
|
+
},
|
|
577
750
|
"$id": "urn:dr:spec:node:api.oauthflows"
|
|
578
751
|
},
|
|
579
752
|
"openapidocument": {
|
|
580
753
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
581
754
|
"title": "OpenAPIDocument",
|
|
582
|
-
"description": "
|
|
755
|
+
"description": "A root-level API description that declares one OpenAPI version and binds together exactly one Info object, one Paths map, and optionally servers, components, root security requirements, tags and external docs, describing a single API surface. One instance exists per openapi.yaml/json file or per generated spec endpoint, not per path, operation or reusable component. Use Info instead when the element is only the title/version/description/contact/license metadata block, not the whole specification. Use Paths instead when the element is only the map of URL path templates to PathItems inside a document. Use Components instead when the element is the reusable-definitions registry (schemas, responses, securitySchemes, etc.), even if it lives in a separate shared file referenced via $ref. Use PathItem instead when the element describes the operations under one URL path rather than the whole API.",
|
|
583
756
|
"allOf": [
|
|
584
757
|
{
|
|
585
758
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -599,42 +772,60 @@
|
|
|
599
772
|
"type": "object",
|
|
600
773
|
"properties": {
|
|
601
774
|
"openapi": {
|
|
602
|
-
"type": "string"
|
|
775
|
+
"type": "string",
|
|
776
|
+
"description": "The OpenAPI Specification version the document conforms to, as a semantic version string (e.g. '3.0.3'); always set, and distinct from the API's own version in Info."
|
|
603
777
|
},
|
|
604
778
|
"info": {
|
|
605
|
-
"type": "string"
|
|
779
|
+
"type": "string",
|
|
780
|
+
"description": "Reference to the single api.info node holding the API's title, version and metadata; always set because Info is required."
|
|
606
781
|
},
|
|
607
782
|
"servers": {
|
|
608
|
-
"type": "string"
|
|
783
|
+
"type": "string",
|
|
784
|
+
"description": "Reference to the api.server nodes giving the base URLs where the API is deployed; set when the spec declares root-level servers, otherwise tooling defaults to '/'. This schema stores the reference as a single string."
|
|
609
785
|
},
|
|
610
786
|
"paths": {
|
|
611
787
|
"type": "string",
|
|
612
788
|
"description": "Required per OpenAPI 3.0 but may be an empty object ({}) when the document is used solely to define reusable components."
|
|
613
789
|
},
|
|
614
790
|
"components": {
|
|
615
|
-
"type": "string"
|
|
791
|
+
"type": "string",
|
|
792
|
+
"description": "Reference to the api.components node holding reusable schemas, responses, parameters and security schemes; set when the document defines any reusable objects."
|
|
616
793
|
},
|
|
617
794
|
"security": {
|
|
618
795
|
"type": "string",
|
|
619
796
|
"description": "Defines default security requirements applied to all operations. Individual operations can override or remove it by setting their own 'security' to an empty array ([])."
|
|
620
797
|
},
|
|
621
798
|
"tags": {
|
|
622
|
-
"type": "string"
|
|
799
|
+
"type": "string",
|
|
800
|
+
"description": "Reference to the root-level api.tag nodes that supply descriptions and external docs for the tag names operations use; set when the spec declares a root tags array. This schema stores the reference as a single string."
|
|
623
801
|
},
|
|
624
802
|
"externalDocs": {
|
|
625
|
-
"type": "string"
|
|
803
|
+
"type": "string",
|
|
804
|
+
"description": "Reference to an api.externaldocumentation node linking to supplementary documentation for the whole API; set only when the spec declares root-level externalDocs."
|
|
626
805
|
}
|
|
627
806
|
},
|
|
628
807
|
"required": ["openapi", "info", "paths"],
|
|
629
808
|
"additionalProperties": false
|
|
630
809
|
}
|
|
631
810
|
},
|
|
811
|
+
"x-dr-standard": "OpenAPI 3.0 OpenAPI Object (root document object)",
|
|
812
|
+
"x-dr-evidence": [
|
|
813
|
+
"a file such as openapi.yaml, openapi.json or swagger/v3 spec whose top-level key is 'openapi: 3.0.x' alongside 'info' and 'paths'",
|
|
814
|
+
"framework spec bootstrap code, e.g. FastAPI(title=..., version=...), springdoc OpenAPI bean, swagger-jsdoc definition object, or NSwag/Swashbuckle AddSwaggerGen document registration",
|
|
815
|
+
"an HTTP route serving the generated spec (e.g. GET /openapi.json, /v3/api-docs) or a Swagger UI/Redoc config pointing at that URL, or an openapi-generator input path in build config"
|
|
816
|
+
],
|
|
817
|
+
"x-dr-distinguish": {
|
|
818
|
+
"api.info": "the element is only the title/version/description/contact/license metadata block, not the whole specification.",
|
|
819
|
+
"api.paths": "the element is only the map of URL path templates to PathItems inside a document.",
|
|
820
|
+
"api.components": "the element is the reusable-definitions registry (schemas, responses, securitySchemes, etc.), even if it lives in a separate shared file referenced via $ref.",
|
|
821
|
+
"api.pathitem": "the element describes the operations under one URL path rather than the whole API."
|
|
822
|
+
},
|
|
632
823
|
"$id": "urn:dr:spec:node:api.openapidocument"
|
|
633
824
|
},
|
|
634
825
|
"operation": {
|
|
635
826
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
636
827
|
"title": "Operation",
|
|
637
|
-
"description": "
|
|
828
|
+
"description": "An HTTP interaction contract identified by one HTTP method on one URL path template, specifying the parameters, request body, responses and security that apply to that method-path pair. Each route handler, controller action or generated client method bound to a distinct method plus path is one instance. Use PathItem instead when the element groups all methods available under a single URL path template, or carries path-level parameters shared by those methods, rather than describing one method's contract. Use Callback instead when the element is an outbound request the API sends to a consumer-supplied URL resolved from a runtime expression, rather than an endpoint the API itself serves. Use Link instead when the element only describes how values from one operation's response feed the parameters of another operation, rather than defining an endpoint. Use Paths instead when the element is the document-wide map of all path templates, not a single method on a single path.",
|
|
638
829
|
"allOf": [
|
|
639
830
|
{
|
|
640
831
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -658,16 +849,20 @@
|
|
|
658
849
|
"description": "Unique identifier for this operation across the entire API document"
|
|
659
850
|
},
|
|
660
851
|
"summary": {
|
|
661
|
-
"type": "string"
|
|
852
|
+
"type": "string",
|
|
853
|
+
"description": "A short plain-text phrase, ideally under 120 characters, stating what the operation does; set it from the handler's docstring or the OpenAPI summary field."
|
|
662
854
|
},
|
|
663
855
|
"description": {
|
|
664
|
-
"type": "string"
|
|
856
|
+
"type": "string",
|
|
857
|
+
"description": "A longer explanation of the operation's behaviour, side effects and constraints, which may use CommonMark; set it when the summary is insufficient to understand the contract."
|
|
665
858
|
},
|
|
666
859
|
"tags": {
|
|
667
|
-
"type": "string"
|
|
860
|
+
"type": "string",
|
|
861
|
+
"description": "Tag name used to group this operation in documentation, typically the resource or controller name; it should match an api.tag element where one is declared. This schema stores the value as a single string although OpenAPI allows a list."
|
|
668
862
|
},
|
|
669
863
|
"deprecated": {
|
|
670
|
-
"type": "boolean"
|
|
864
|
+
"type": "boolean",
|
|
865
|
+
"description": "Set to true when the operation is marked obsolete (for example via @Deprecated or OpenAPI deprecated: true) and consumers should stop calling it; it defaults to false."
|
|
671
866
|
},
|
|
672
867
|
"http_method": {
|
|
673
868
|
"type": "string",
|
|
@@ -693,12 +888,24 @@
|
|
|
693
888
|
"additionalProperties": false
|
|
694
889
|
}
|
|
695
890
|
},
|
|
891
|
+
"x-dr-standard": "OpenAPI 3.0 Operation Object",
|
|
892
|
+
"x-dr-evidence": [
|
|
893
|
+
"A handler function or method registered for a specific HTTP verb and path, e.g. @app.get('/users/{id}'), @GetMapping(\"/users/{id}\"), router.post('/orders', ...), or [HttpDelete(\"{id}\")] on an ASP.NET controller action",
|
|
894
|
+
"An entry under paths.<template>.<get|post|put|delete|patch|head|options|trace> in an openapi.yaml or openapi.json file, typically carrying an operationId",
|
|
895
|
+
"A method in a generated API client, for example from openapi-generator or NSwag, that issues a request with a fixed HTTP method to a fixed path template and is named after an operationId"
|
|
896
|
+
],
|
|
897
|
+
"x-dr-distinguish": {
|
|
898
|
+
"api.pathitem": "the element groups all methods available under a single URL path template, or carries path-level parameters shared by those methods, rather than describing one method's contract",
|
|
899
|
+
"api.callback": "the element is an outbound request the API sends to a consumer-supplied URL resolved from a runtime expression, rather than an endpoint the API itself serves",
|
|
900
|
+
"api.link": "the element only describes how values from one operation's response feed the parameters of another operation, rather than defining an endpoint",
|
|
901
|
+
"api.paths": "the element is the document-wide map of all path templates, not a single method on a single path"
|
|
902
|
+
},
|
|
696
903
|
"$id": "urn:dr:spec:node:api.operation"
|
|
697
904
|
},
|
|
698
905
|
"parameter": {
|
|
699
906
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
700
907
|
"title": "Parameter",
|
|
701
|
-
"description": "
|
|
908
|
+
"description": "A named input to an API operation or path item that is carried outside the request body, in the URL path, the query string, a request header or a cookie. It is identified by the pair (name, in) and constrained by either a schema or a single-entry content map. Use RequestBody instead when the input is carried in the HTTP message body, including form fields of application/x-www-form-urlencoded or multipart/form-data payloads. Use Header instead when the header describes a response header, or a multipart part header under an Encoding, where the name comes from a map key and no 'in' location is given. Use ServerVariable instead when the {placeholder} is substituted in a Server URL (host, base path, tenant) rather than in a Paths key template. Use Schema instead when you are modelling the data type or constraints of the value itself rather than the named input slot that carries it.",
|
|
702
909
|
"allOf": [
|
|
703
910
|
{
|
|
704
911
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -723,16 +930,20 @@
|
|
|
723
930
|
"description": "Location of the parameter. Path parameters must always have required: true. Default serialization style: 'form' for query/cookie, 'simple' for path/header."
|
|
724
931
|
},
|
|
725
932
|
"description": {
|
|
726
|
-
"type": "string"
|
|
933
|
+
"type": "string",
|
|
934
|
+
"description": "Human-readable explanation of the parameter's meaning and accepted values, in CommonMark; set it whenever the name alone does not convey semantics or units."
|
|
727
935
|
},
|
|
728
936
|
"required": {
|
|
729
|
-
"type": "boolean"
|
|
937
|
+
"type": "boolean",
|
|
938
|
+
"description": "Whether the client must supply the parameter. It must be true when in is 'path' and defaults to false otherwise; set it to true for mandatory query, header or cookie inputs."
|
|
730
939
|
},
|
|
731
940
|
"deprecated": {
|
|
732
|
-
"type": "boolean"
|
|
941
|
+
"type": "boolean",
|
|
942
|
+
"description": "Marks the parameter as scheduled for removal so that consumers stop sending it. Defaults to false; set it to true when the handler still accepts the parameter but it is slated for removal."
|
|
733
943
|
},
|
|
734
944
|
"allowEmptyValue": {
|
|
735
|
-
"type": "boolean"
|
|
945
|
+
"type": "boolean",
|
|
946
|
+
"description": "Permits a query parameter to be sent with an empty value (e.g. '?flag='). It is valid only when in is 'query', is ignored when the chosen style cannot serialize an empty value, and is NOT RECOMMENDED in OpenAPI 3.0.3."
|
|
736
947
|
},
|
|
737
948
|
"style": {
|
|
738
949
|
"type": "string",
|
|
@@ -775,12 +986,24 @@
|
|
|
775
986
|
"additionalProperties": false
|
|
776
987
|
}
|
|
777
988
|
},
|
|
989
|
+
"x-dr-standard": "OpenAPI 3.0 Parameter Object",
|
|
990
|
+
"x-dr-evidence": [
|
|
991
|
+
"Framework parameter bindings on handler arguments, such as Spring @PathVariable/@RequestParam/@RequestHeader/@CookieValue, FastAPI Path()/Query()/Header()/Cookie(), or ASP.NET [FromRoute]/[FromQuery]/[FromHeader].",
|
|
992
|
+
"Handler code reading req.params.<name>, req.query.<name>, req.get('<Header>') or req.cookies.<name> in an Express/Koa-style route registered on a router.",
|
|
993
|
+
"An entry under a 'parameters:' list in an OpenAPI YAML/JSON file, at operation, path-item or components level, containing 'name:' and 'in: path|query|header|cookie'."
|
|
994
|
+
],
|
|
995
|
+
"x-dr-distinguish": {
|
|
996
|
+
"api.requestbody": "the input is carried in the HTTP message body, including form fields of application/x-www-form-urlencoded or multipart/form-data payloads.",
|
|
997
|
+
"api.header": "the header describes a response header, or a multipart part header under an Encoding, where the name comes from a map key and no 'in' location is given.",
|
|
998
|
+
"api.servervariable": "the {placeholder} is substituted in a Server URL (host, base path, tenant) rather than in a Paths key template.",
|
|
999
|
+
"api.schema": "you are modelling the data type or constraints of the value itself rather than the named input slot that carries it."
|
|
1000
|
+
},
|
|
778
1001
|
"$id": "urn:dr:spec:node:api.parameter"
|
|
779
1002
|
},
|
|
780
1003
|
"pathitem": {
|
|
781
1004
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
782
1005
|
"title": "PathItem",
|
|
783
|
-
"description": "
|
|
1006
|
+
"description": "An OpenAPI path-level object that groups the HTTP operations exposed under exactly one URL path template (e.g. /users/{userId}), or under one callback runtime expression. It carries parameters and servers shared by all of those operations. It describes the whole path, not any single method. Use Operation instead when the element is one HTTP method on the path (e.g. GET /users/{userId}) with its own operationId, request body and responses. Use Paths instead when the element is the document-wide map from every path template to its PathItem, not a single path entry. Use Callback instead when the element is the runtime-expression key (e.g. $request.body#/callbackUrl) naming where an asynchronous notification is sent, rather than the PathItem that key maps to. Use Parameter instead when the element is a single named input (path, query, header or cookie), even if it is declared at path level and shared by all operations.",
|
|
784
1007
|
"allOf": [
|
|
785
1008
|
{
|
|
786
1009
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -800,22 +1023,36 @@
|
|
|
800
1023
|
"type": "object",
|
|
801
1024
|
"properties": {
|
|
802
1025
|
"summary": {
|
|
803
|
-
"type": "string"
|
|
1026
|
+
"type": "string",
|
|
1027
|
+
"description": "Optional short one-line plain-text summary intended to apply to all operations under this path; set it when the path as a whole has a single clear purpose (e.g. 'Single user resource')."
|
|
804
1028
|
},
|
|
805
1029
|
"description": {
|
|
806
|
-
"type": "string"
|
|
1030
|
+
"type": "string",
|
|
1031
|
+
"description": "Optional longer explanation, in CommonMark Markdown, of the resource or behaviour shared by all operations under this path; set it when path-wide context (semantics, constraints) is not captured by individual operation descriptions."
|
|
807
1032
|
}
|
|
808
1033
|
},
|
|
809
1034
|
"required": [],
|
|
810
1035
|
"additionalProperties": false
|
|
811
1036
|
}
|
|
812
1037
|
},
|
|
1038
|
+
"x-dr-standard": "OpenAPI 3.0 Path Item Object",
|
|
1039
|
+
"x-dr-evidence": [
|
|
1040
|
+
"a key beginning with '/' directly under 'paths:' in an OpenAPI YAML/JSON file, whose children are HTTP-method keys (get, post, put, delete) and optionally a shared 'parameters' or 'servers' list",
|
|
1041
|
+
"a router chain bound to one path string with several verb handlers, e.g. Express router.route('/users/:id').get(...).put(...).delete(...)",
|
|
1042
|
+
"a class-based view bound to a single URL pattern whose methods are named after HTTP verbs, e.g. a Flask MethodView or Django APIView registered at path('users/<int:id>/', ...)"
|
|
1043
|
+
],
|
|
1044
|
+
"x-dr-distinguish": {
|
|
1045
|
+
"api.operation": "the element is one HTTP method on the path (e.g. GET /users/{userId}) with its own operationId, request body and responses",
|
|
1046
|
+
"api.paths": "the element is the document-wide map from every path template to its PathItem, not a single path entry",
|
|
1047
|
+
"api.callback": "the element is the runtime-expression key (e.g. $request.body#/callbackUrl) naming where an asynchronous notification is sent, rather than the PathItem that key maps to",
|
|
1048
|
+
"api.parameter": "the element is a single named input (path, query, header or cookie), even if it is declared at path level and shared by all operations"
|
|
1049
|
+
},
|
|
813
1050
|
"$id": "urn:dr:spec:node:api.pathitem"
|
|
814
1051
|
},
|
|
815
1052
|
"paths": {
|
|
816
1053
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
817
1054
|
"title": "Paths",
|
|
818
|
-
"description": "A
|
|
1055
|
+
"description": "A single container object within one OpenAPI document that maps each relative URL path template (a key beginning with '/', e.g. /users/{id}) to exactly one PathItem, representing the complete set of endpoints the document exposes. There is one per OpenAPI document, and it does not itself carry operations, servers or metadata. Use PathItem instead when the symbol represents one specific URL path pattern and the HTTP methods available on it, rather than the whole collection of paths. Use OpenAPIDocument instead when the symbol is the root specification object carrying openapi version, info, servers, components and security in addition to the paths map. Use Operation instead when the symbol is a single HTTP method handler bound to a path, with its own parameters, request body and responses. Use Components instead when the map holds reusable named definitions (schemas, responses, parameters, etc.) referenced via $ref rather than routable URL paths.",
|
|
819
1056
|
"allOf": [
|
|
820
1057
|
{
|
|
821
1058
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -837,12 +1074,24 @@
|
|
|
837
1074
|
"additionalProperties": false
|
|
838
1075
|
}
|
|
839
1076
|
},
|
|
1077
|
+
"x-dr-standard": "OpenAPI 3.0 Paths Object",
|
|
1078
|
+
"x-dr-evidence": [
|
|
1079
|
+
"The top-level 'paths:' key in an openapi.yaml/openapi.json file, whose children are keys like '/users/{userId}'.",
|
|
1080
|
+
"A root route table that enumerates all URL patterns of the service, e.g. Django root urls.py urlpatterns, Rails config/routes.rb, or an Express app mounting all routers.",
|
|
1081
|
+
"Framework-generated spec output exposing a paths dictionary, e.g. FastAPI app.openapi()['paths'] or a springdoc/Swashbuckle-generated document's Paths collection."
|
|
1082
|
+
],
|
|
1083
|
+
"x-dr-distinguish": {
|
|
1084
|
+
"api.pathitem": "the symbol represents one specific URL path pattern and the HTTP methods available on it, rather than the whole collection of paths.",
|
|
1085
|
+
"api.openapidocument": "the symbol is the root specification object carrying openapi version, info, servers, components and security in addition to the paths map.",
|
|
1086
|
+
"api.operation": "the symbol is a single HTTP method handler bound to a path, with its own parameters, request body and responses.",
|
|
1087
|
+
"api.components": "the map holds reusable named definitions (schemas, responses, parameters, etc.) referenced via $ref rather than routable URL paths."
|
|
1088
|
+
},
|
|
840
1089
|
"$id": "urn:dr:spec:node:api.paths"
|
|
841
1090
|
},
|
|
842
1091
|
"ratelimit": {
|
|
843
1092
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
844
1093
|
"title": "RateLimit",
|
|
845
|
-
"description": "
|
|
1094
|
+
"description": "A request-throttling policy attached to an API's servers, paths or operations that caps how many requests a consumer, identified by a counting key, may make within a fixed time window. It also states what enforcement happens when that cap is exceeded. Use Header instead when you are modelling the response headers that report quota state to clients (e.g. X-RateLimit-Remaining, RateLimit-Reset, Retry-After), not the limit policy itself. Use Response instead when you are modelling the documented HTTP outcome returned when a limit trips (typically 429 Too Many Requests or 503), including its description and body. Use SecurityScheme instead when the element defines how a caller is authenticated (an API key, bearer token or OAuth2), even if that identity is later used as the rate-limit key.",
|
|
846
1095
|
"allOf": [
|
|
847
1096
|
{
|
|
848
1097
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -892,12 +1141,23 @@
|
|
|
892
1141
|
"additionalProperties": false
|
|
893
1142
|
}
|
|
894
1143
|
},
|
|
1144
|
+
"x-dr-standard": "No OpenAPI 3.0 object; typically expressed as a vendor extension (e.g. x-ratelimit) or in gateway config; enforcement action aligns with NIST SP 800-53 SC-5 Denial-of-Service Protection.",
|
|
1145
|
+
"x-dr-evidence": [
|
|
1146
|
+
"Rate-limiting middleware mounted on an HTTP router with numeric limits, e.g. express-rate-limit `rateLimit({ windowMs: 60000, max: 100, keyGenerator })` or ASP.NET `AddRateLimiter`/`[EnableRateLimiting]`.",
|
|
1147
|
+
"Framework throttle declarations on handlers or controllers, e.g. NestJS `@Throttle({ default: { limit: 10, ttl: 60000 } })`, Django REST Framework `throttle_classes` with `DEFAULT_THROTTLE_RATES = {'user': '1000/day'}`, or Spring/Bucket4j bucket definitions.",
|
|
1148
|
+
"API gateway or proxy configuration defining request quotas per route or consumer, e.g. a Kong `rate-limiting` plugin, an AWS API Gateway usage plan throttle, an nginx `limit_req_zone`, or an `x-ratelimit` extension in the OpenAPI file."
|
|
1149
|
+
],
|
|
1150
|
+
"x-dr-distinguish": {
|
|
1151
|
+
"api.header": "you are modelling the response headers that report quota state to clients (e.g. X-RateLimit-Remaining, RateLimit-Reset, Retry-After), not the limit policy itself.",
|
|
1152
|
+
"api.response": "you are modelling the documented HTTP outcome returned when a limit trips (typically 429 Too Many Requests or 503), including its description and body.",
|
|
1153
|
+
"api.securityscheme": "the element defines how a caller is authenticated (an API key, bearer token or OAuth2), even if that identity is later used as the rate-limit key."
|
|
1154
|
+
},
|
|
895
1155
|
"$id": "urn:dr:spec:node:api.ratelimit"
|
|
896
1156
|
},
|
|
897
1157
|
"requestbody": {
|
|
898
1158
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
899
1159
|
"title": "RequestBody",
|
|
900
|
-
"description": "
|
|
1160
|
+
"description": "An API contract element describing the payload a client sends in the body of a single operation's HTTP request, expressed as one or more media-type entries (e.g. application/json, multipart/form-data) plus an optional required flag and description. It covers only the request payload of a body-bearing method; URL, query, header and cookie inputs and anything returned to the client are excluded. Use Parameter instead when the input travels in the path, query string, header or cookie rather than the HTTP message body. Use MediaType instead when modelling the schema, examples and encoding for one specific MIME type inside the body's content map, rather than the body as a whole with its required flag. Use Schema instead when describing the data shape itself (fields, types, constraints) independent of whether it is carried in a request, a response or a parameter. Use Response instead when the payload is sent by the server back to the client for a status code, not by the client to the server.",
|
|
901
1161
|
"allOf": [
|
|
902
1162
|
{
|
|
903
1163
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -917,21 +1177,35 @@
|
|
|
917
1177
|
"type": "object",
|
|
918
1178
|
"properties": {
|
|
919
1179
|
"description": {
|
|
920
|
-
"type": "string"
|
|
1180
|
+
"type": "string",
|
|
1181
|
+
"description": "Brief human-readable explanation of the request payload's purpose and contents, CommonMark allowed per OpenAPI 3.0. Set it whenever the body's meaning is not obvious from the operation summary."
|
|
921
1182
|
},
|
|
922
1183
|
"required": {
|
|
923
|
-
"type": "boolean"
|
|
1184
|
+
"type": "boolean",
|
|
1185
|
+
"description": "Boolean indicating whether a client must send a body for the operation to succeed; defaults to false, so set it to true when the handler rejects requests with an empty or missing body."
|
|
924
1186
|
}
|
|
925
1187
|
},
|
|
926
1188
|
"additionalProperties": false
|
|
927
1189
|
}
|
|
928
1190
|
},
|
|
1191
|
+
"x-dr-standard": "OpenAPI 3.0 Request Body Object",
|
|
1192
|
+
"x-dr-evidence": [
|
|
1193
|
+
"A route handler parameter bound from the body, such as Spring @RequestBody, FastAPI Body()/Pydantic model argument, NestJS @Body() or ASP.NET [FromBody].",
|
|
1194
|
+
"A 'requestBody:' block under a POST/PUT/PATCH operation, or an entry under 'components/requestBodies', in an OpenAPI YAML/JSON file.",
|
|
1195
|
+
"Body validation middleware or a DTO class applied to req.body, e.g. express.json() followed by a Joi/Zod/class-validator schema check, or a generated client method that serializes a payload argument with a Content-Type header."
|
|
1196
|
+
],
|
|
1197
|
+
"x-dr-distinguish": {
|
|
1198
|
+
"api.parameter": "the input travels in the path, query string, header or cookie rather than the HTTP message body.",
|
|
1199
|
+
"api.mediatype": "modelling the schema, examples and encoding for one specific MIME type inside the body's content map, rather than the body as a whole with its required flag.",
|
|
1200
|
+
"api.schema": "describing the data shape itself (fields, types, constraints) independent of whether it is carried in a request, a response or a parameter.",
|
|
1201
|
+
"api.response": "the payload is sent by the server back to the client for a status code, not by the client to the server."
|
|
1202
|
+
},
|
|
929
1203
|
"$id": "urn:dr:spec:node:api.requestbody"
|
|
930
1204
|
},
|
|
931
1205
|
"response": {
|
|
932
1206
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
933
1207
|
"title": "Response",
|
|
934
|
-
"description": "
|
|
1208
|
+
"description": "An OpenAPI description object specifying one possible HTTP outcome of an operation for a single status code (or 'default'). It carries a required description and, optionally, response headers, a body content map keyed by MIME type, and links to follow-on operations. Use Responses instead when the element is the whole status-code-to-response map for an operation rather than a single outcome under one status code. Use MediaType instead when the element describes the schema, examples and encoding for one MIME type entry (e.g. application/json) inside a response's content map. Use Schema instead when the element defines only the data shape of a response body, independent of status code, headers or description. Use Header instead when the element defines one individual response header rather than the response that contains it.",
|
|
935
1209
|
"allOf": [
|
|
936
1210
|
{
|
|
937
1211
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -951,19 +1225,32 @@
|
|
|
951
1225
|
"type": "object",
|
|
952
1226
|
"properties": {
|
|
953
1227
|
"description": {
|
|
954
|
-
"type": "string"
|
|
1228
|
+
"type": "string",
|
|
1229
|
+
"description": "Required human-readable explanation of what this outcome means (e.g. 'User not found'); CommonMark is permitted. Set it for every response, including those with no body."
|
|
955
1230
|
}
|
|
956
1231
|
},
|
|
957
1232
|
"required": ["description"],
|
|
958
1233
|
"additionalProperties": false
|
|
959
1234
|
}
|
|
960
1235
|
},
|
|
1236
|
+
"x-dr-standard": "OpenAPI 3.0 Response Object",
|
|
1237
|
+
"x-dr-evidence": [
|
|
1238
|
+
"an @ApiResponse(responseCode=\"404\", description=...) annotation in springdoc/Swagger, or a NestJS @ApiOkResponse/@ApiNotFoundResponse decorator on a controller method",
|
|
1239
|
+
"an entry under a status-code key such as '200': or 'default': beneath an operation's 'responses' map, or under 'components/responses', in an openapi.yaml/json file",
|
|
1240
|
+
"a FastAPI route declaring responses={404: {\"description\": ..., \"model\": ...}}, or a handler returning a fixed status code with a documented body or headers"
|
|
1241
|
+
],
|
|
1242
|
+
"x-dr-distinguish": {
|
|
1243
|
+
"api.responses": "the element is the whole status-code-to-response map for an operation rather than a single outcome under one status code",
|
|
1244
|
+
"api.mediatype": "the element describes the schema, examples and encoding for one MIME type entry (e.g. application/json) inside a response's content map",
|
|
1245
|
+
"api.schema": "the element defines only the data shape of a response body, independent of status code, headers or description",
|
|
1246
|
+
"api.header": "the element defines one individual response header rather than the response that contains it"
|
|
1247
|
+
},
|
|
961
1248
|
"$id": "urn:dr:spec:node:api.response"
|
|
962
1249
|
},
|
|
963
1250
|
"responses": {
|
|
964
1251
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
965
1252
|
"title": "Responses",
|
|
966
|
-
"description": "A map
|
|
1253
|
+
"description": "A status-code-keyed map, scoped to exactly one operation, whose keys are HTTP status codes (e.g. '200', '404') or 'default' and whose values are the Response objects describing each possible outcome. It is the container of an operation's outcomes, not any single outcome. Use Response instead when the element describes one outcome (its description, body content, headers, links) under a single status code rather than the whole set of outcomes for an operation. Use Components instead when the element is the reusable registry (components.responses) of named, individually $ref-able Response definitions rather than the status-code map attached to one operation. Use Operation instead when the element is the HTTP method bound to a path that owns the responses map alongside its parameters, request body, security and tags.",
|
|
967
1254
|
"allOf": [
|
|
968
1255
|
{
|
|
969
1256
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -985,12 +1272,23 @@
|
|
|
985
1272
|
"additionalProperties": false
|
|
986
1273
|
}
|
|
987
1274
|
},
|
|
1275
|
+
"x-dr-standard": "OpenAPI 3.0 Responses Object",
|
|
1276
|
+
"x-dr-evidence": [
|
|
1277
|
+
"A 'responses:' block nested under an HTTP method in an openapi.yaml/json file, with status-code keys such as '200', '404' or 'default' each pointing to a response definition or $ref.",
|
|
1278
|
+
"A Java/Spring handler annotated @ApiResponses({@ApiResponse(responseCode = \"200\", ...), @ApiResponse(responseCode = \"404\", ...)}), or a NestJS handler stacked with several @ApiResponse({status: ...}) decorators.",
|
|
1279
|
+
"A route decorator argument mapping status codes to outcomes, such as FastAPI @app.get(..., responses={404: {...}}) or drf-spectacular @extend_schema(responses={200: Serializer, 404: None})."
|
|
1280
|
+
],
|
|
1281
|
+
"x-dr-distinguish": {
|
|
1282
|
+
"api.response": "the element describes one outcome (its description, body content, headers, links) under a single status code rather than the whole set of outcomes for an operation.",
|
|
1283
|
+
"api.components": "the element is the reusable registry (components.responses) of named, individually $ref-able Response definitions rather than the status-code map attached to one operation.",
|
|
1284
|
+
"api.operation": "the element is the HTTP method bound to a path that owns the responses map alongside its parameters, request body, security and tags."
|
|
1285
|
+
},
|
|
988
1286
|
"$id": "urn:dr:spec:node:api.responses"
|
|
989
1287
|
},
|
|
990
1288
|
"schema": {
|
|
991
1289
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
992
1290
|
"title": "Schema",
|
|
993
|
-
"description": "
|
|
1291
|
+
"description": "A data-shape definition, expressed as an OpenAPI 3.0 Schema Object, that constrains the type and structure of a value exchanged over the API, such as a request body, response body, parameter or header value. It is either a named entry under components/schemas or an inline schema nested in a media type, parameter, header or another schema. Use MediaType instead when the element is the MIME-type-keyed content entry (e.g. application/json) that wraps a schema together with examples and encoding, rather than the shape definition itself. Use Parameter instead when the element is a named operation input with a location (path, query, header or cookie), whose value type is merely described by a referenced schema. Use Components instead when the element is the registry that holds reusable schemas, responses and parameters, not an individual type definition. Use Example instead when the element is a concrete sample value illustrating data, rather than the constraints the data must satisfy.",
|
|
994
1292
|
"allOf": [
|
|
995
1293
|
{
|
|
996
1294
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -1010,25 +1308,32 @@
|
|
|
1010
1308
|
"type": "object",
|
|
1011
1309
|
"properties": {
|
|
1012
1310
|
"type": {
|
|
1013
|
-
"type": "string"
|
|
1311
|
+
"type": "string",
|
|
1312
|
+
"description": "The JSON data type of the value: one of string, number, integer, boolean, array or object. OpenAPI 3.0 does not allow type arrays or 'null'. Set it on every non-$ref, non-composed schema."
|
|
1014
1313
|
},
|
|
1015
1314
|
"title": {
|
|
1016
|
-
"type": "string"
|
|
1315
|
+
"type": "string",
|
|
1316
|
+
"description": "A short human-readable label for the schema, typically the model or DTO name. Set it when documentation tooling should display a name other than the component key."
|
|
1017
1317
|
},
|
|
1018
1318
|
"description": {
|
|
1019
|
-
"type": "string"
|
|
1319
|
+
"type": "string",
|
|
1320
|
+
"description": "Explanatory text for the schema or property, in CommonMark. Set it whenever the meaning of the value is not obvious from its name and type."
|
|
1020
1321
|
},
|
|
1021
1322
|
"format": {
|
|
1022
|
-
"type": "string"
|
|
1323
|
+
"type": "string",
|
|
1324
|
+
"description": "A modifier refining 'type', such as int32, int64, float, double, byte, binary, date, date-time, password, email or uuid. Set it when the base type alone does not convey the value's encoding or semantics."
|
|
1023
1325
|
},
|
|
1024
1326
|
"default": {
|
|
1025
|
-
"type": "string"
|
|
1327
|
+
"type": "string",
|
|
1328
|
+
"description": "The value the server assumes when the consumer omits this property or parameter. It must conform to the schema's type. Set it only when an actual server-side default exists."
|
|
1026
1329
|
},
|
|
1027
1330
|
"enum": {
|
|
1028
|
-
"type": "string"
|
|
1331
|
+
"type": "string",
|
|
1332
|
+
"description": "The closed set of literal values the data may take, each valid against the schema's type, as declared by the enum keyword. Set it for fixed vocabularies such as status codes or modes. This schema stores the set as a single string."
|
|
1029
1333
|
},
|
|
1030
1334
|
"nullable": {
|
|
1031
|
-
"type": "boolean"
|
|
1335
|
+
"type": "boolean",
|
|
1336
|
+
"description": "Boolean, default false. When true, null is an accepted value in addition to the declared type (the OpenAPI 3.0 substitute for type: [T, null]). Set it when the API may send or accept explicit nulls."
|
|
1032
1337
|
},
|
|
1033
1338
|
"properties": {
|
|
1034
1339
|
"type": "object",
|
|
@@ -1087,12 +1392,24 @@
|
|
|
1087
1392
|
"additionalProperties": false
|
|
1088
1393
|
}
|
|
1089
1394
|
},
|
|
1395
|
+
"x-dr-standard": "OpenAPI 3.0 Schema Object",
|
|
1396
|
+
"x-dr-evidence": [
|
|
1397
|
+
"A DTO or model class used as a route's request or response type and annotated for OpenAPI generation, such as a Pydantic model passed as response_model in FastAPI, a NestJS class with @ApiProperty fields, or a Java class with @Schema.",
|
|
1398
|
+
"An entry under '#/components/schemas/' or a 'schema:' block beneath 'content' in an openapi.yaml/json file, containing keywords such as type, properties, required, items, allOf or $ref.",
|
|
1399
|
+
"A validation schema object attached to a route definition, such as a Fastify route 'schema: { body, response }', a zod/joi schema converted to OpenAPI, or a model class emitted by openapi-generator."
|
|
1400
|
+
],
|
|
1401
|
+
"x-dr-distinguish": {
|
|
1402
|
+
"api.mediatype": "the element is the MIME-type-keyed content entry (e.g. application/json) that wraps a schema together with examples and encoding, rather than the shape definition itself",
|
|
1403
|
+
"api.parameter": "the element is a named operation input with a location (path, query, header or cookie), whose value type is merely described by a referenced schema",
|
|
1404
|
+
"api.components": "the element is the registry that holds reusable schemas, responses and parameters, not an individual type definition",
|
|
1405
|
+
"api.example": "the element is a concrete sample value illustrating data, rather than the constraints the data must satisfy"
|
|
1406
|
+
},
|
|
1090
1407
|
"$id": "urn:dr:spec:node:api.schema"
|
|
1091
1408
|
},
|
|
1092
1409
|
"securityscheme": {
|
|
1093
1410
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
1094
1411
|
"title": "SecurityScheme",
|
|
1095
|
-
"description": "
|
|
1412
|
+
"description": "A named declaration in an API description of one mechanism by which clients present credentials: an API key carried in a header, query parameter or cookie; an HTTP authentication scheme such as basic or bearer; a set of OAuth 2.0 flows; or an OpenID Connect discovery URL. It is registered under components.securitySchemes and referenced by name from root-level or operation-level security requirements, which are not themselves instances. Use OAuthFlows instead when modelling the container of grant-type configurations nested inside an oauth2 scheme, rather than the scheme itself. Use OAuthFlow instead when modelling the authorizationUrl, tokenUrl and scopes of a single OAuth 2.0 grant type. Use Parameter instead when a header, query or cookie value is an ordinary operation input rather than a credential the API authenticates, or the API key is only documented as a plain parameter. Use Operation instead when recording that a particular endpoint requires or waives authentication; that is the operation's security requirement referencing this scheme by name.",
|
|
1096
1413
|
"allOf": [
|
|
1097
1414
|
{
|
|
1098
1415
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -1117,16 +1434,20 @@
|
|
|
1117
1434
|
"description": "Type of security scheme"
|
|
1118
1435
|
},
|
|
1119
1436
|
"description": {
|
|
1120
|
-
"type": "string"
|
|
1437
|
+
"type": "string",
|
|
1438
|
+
"description": "Free-text (CommonMark) explanation of the scheme for consumers, e.g. how to obtain a key or token; set whenever the mechanism needs explanation beyond its type."
|
|
1121
1439
|
},
|
|
1122
1440
|
"in": {
|
|
1123
|
-
"type": "string"
|
|
1441
|
+
"type": "string",
|
|
1442
|
+
"description": "Location of the API key: one of 'header', 'query' or 'cookie'. Required and only meaningful when type is apiKey."
|
|
1124
1443
|
},
|
|
1125
1444
|
"scheme": {
|
|
1126
|
-
"type": "string"
|
|
1445
|
+
"type": "string",
|
|
1446
|
+
"description": "Name of the HTTP Authorization scheme as registered by IANA (RFC 7235), e.g. 'basic', 'bearer' or 'digest'. Required and only meaningful when type is http."
|
|
1127
1447
|
},
|
|
1128
1448
|
"bearerFormat": {
|
|
1129
|
-
"type": "string"
|
|
1449
|
+
"type": "string",
|
|
1450
|
+
"description": "Hint describing how the bearer token is formatted, e.g. 'JWT'. Documentation only; set when type is http and scheme is bearer."
|
|
1130
1451
|
},
|
|
1131
1452
|
"openIdConnectUrl": {
|
|
1132
1453
|
"type": "string",
|
|
@@ -1137,12 +1458,24 @@
|
|
|
1137
1458
|
"additionalProperties": false
|
|
1138
1459
|
}
|
|
1139
1460
|
},
|
|
1461
|
+
"x-dr-standard": "OpenAPI 3.0 Security Scheme Object (components.securitySchemes)",
|
|
1462
|
+
"x-dr-evidence": [
|
|
1463
|
+
"An entry under components.securitySchemes in an OpenAPI YAML/JSON file, e.g. bearerAuth: {type: http, scheme: bearer, bearerFormat: JWT}.",
|
|
1464
|
+
"Framework declarations that emit a scheme into generated OpenAPI, such as FastAPI OAuth2PasswordBearer(tokenUrl=...), APIKeyHeader(name='X-API-Key') or HTTPBearer(); springdoc @SecurityScheme(name=..., type=SecuritySchemeType.HTTP, scheme=\"bearer\"); or NestJS DocumentBuilder().addBearerAuth().",
|
|
1465
|
+
"Authentication middleware or strategy that reads a credential from a fixed location and is applied across routes, e.g. a passport-jwt/passport-http-bearer strategy, or a middleware checking req.headers['x-api-key'] before handlers run."
|
|
1466
|
+
],
|
|
1467
|
+
"x-dr-distinguish": {
|
|
1468
|
+
"api.oauthflows": "modelling the container of grant-type configurations nested inside an oauth2 scheme, rather than the scheme itself.",
|
|
1469
|
+
"api.oauthflow": "modelling the authorizationUrl, tokenUrl and scopes of a single OAuth 2.0 grant type.",
|
|
1470
|
+
"api.parameter": "a header, query or cookie value is an ordinary operation input rather than a credential the API authenticates, or the API key is only documented as a plain parameter.",
|
|
1471
|
+
"api.operation": "recording that a particular endpoint requires or waives authentication; that is the operation's security requirement referencing this scheme by name."
|
|
1472
|
+
},
|
|
1140
1473
|
"$id": "urn:dr:spec:node:api.securityscheme"
|
|
1141
1474
|
},
|
|
1142
1475
|
"server": {
|
|
1143
1476
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
1144
1477
|
"title": "Server",
|
|
1145
|
-
"description": "
|
|
1478
|
+
"description": "A base-URL declaration in an API description that names a network location (absolute or relative, optionally containing {variable} placeholders) to which operation paths are appended to form request URLs. It is declared in a 'servers' array at document, path or operation scope. Use ServerVariable instead when the element is a single {placeholder} inside a server URL, with its default and allowed values, rather than the URL entry itself. Use PathItem instead when the element is a path template such as /users/{id} appended after the base URL, not the scheme/host/base-path prefix. Use OpenAPIDocument instead when the element is the whole API description that contains the servers array, not one entry within it. Use ExternalDocumentation instead when the URL points to human-readable documentation rather than to a location where API requests are sent.",
|
|
1146
1479
|
"allOf": [
|
|
1147
1480
|
{
|
|
1148
1481
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -1162,10 +1495,12 @@
|
|
|
1162
1495
|
"type": "object",
|
|
1163
1496
|
"properties": {
|
|
1164
1497
|
"url": {
|
|
1165
|
-
"type": "string"
|
|
1498
|
+
"type": "string",
|
|
1499
|
+
"description": "Base URL of the target host, given as an absolute URL or one relative to the document's location, and optionally containing {name} placeholders defined in 'variables'. Always set it; operation paths are appended to it."
|
|
1166
1500
|
},
|
|
1167
1501
|
"description": {
|
|
1168
|
-
"type": "string"
|
|
1502
|
+
"type": "string",
|
|
1503
|
+
"description": "Optional human-readable text, CommonMark allowed, identifying the host or environment the URL designates (e.g. 'Production', 'EU staging'). Set it when several servers are listed."
|
|
1169
1504
|
},
|
|
1170
1505
|
"variables": {
|
|
1171
1506
|
"type": "string",
|
|
@@ -1176,12 +1511,24 @@
|
|
|
1176
1511
|
"additionalProperties": false
|
|
1177
1512
|
}
|
|
1178
1513
|
},
|
|
1514
|
+
"x-dr-standard": "OpenAPI 3.0 Server Object",
|
|
1515
|
+
"x-dr-evidence": [
|
|
1516
|
+
"a 'servers:' list with 'url:' entries in an openapi.yaml/json file, or a @Server(url=...) / @OpenAPIDefinition(servers=...) annotation",
|
|
1517
|
+
"a generated API client configured with a basePath or baseURL constant such as 'https://api.example.com/v1', often switched per environment",
|
|
1518
|
+
"a framework OpenAPI setup call that sets server URLs, e.g. FastAPI(servers=[{'url': ...}]) or springdoc OpenAPI().servers(List.of(new Server().url(...)))"
|
|
1519
|
+
],
|
|
1520
|
+
"x-dr-distinguish": {
|
|
1521
|
+
"api.servervariable": "the element is a single {placeholder} inside a server URL, with its default and allowed values, rather than the URL entry itself",
|
|
1522
|
+
"api.pathitem": "the element is a path template such as /users/{id} appended after the base URL, not the scheme/host/base-path prefix",
|
|
1523
|
+
"api.openapidocument": "the element is the whole API description that contains the servers array, not one entry within it",
|
|
1524
|
+
"api.externaldocumentation": "the URL points to human-readable documentation rather than to a location where API requests are sent"
|
|
1525
|
+
},
|
|
1179
1526
|
"$id": "urn:dr:spec:node:api.server"
|
|
1180
1527
|
},
|
|
1181
1528
|
"servervariable": {
|
|
1182
1529
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
1183
1530
|
"title": "ServerVariable",
|
|
1184
|
-
"description": "A
|
|
1531
|
+
"description": "A substitution rule for a single {placeholder} token in an api.server URL template. It declares the default value, used when no other value is supplied, and may restrict the token to an enumerated set of allowed values. It is identified by the placeholder name used as its key in the parent Server's variables map. Use Server instead when the element is the server URL template itself, or a concrete fixed base URL with no substitutable placeholder, rather than the definition of one placeholder within it. Use Parameter instead when the placeholder sits in a path template such as /users/{id}, or is a query, header or cookie input. Such inputs are supplied per request by the caller, not when the client selects its base URL. Use Example instead when the value is only an illustrative sample for a request, response or parameter, not a default or allowed value constraining a server URL token.",
|
|
1185
1532
|
"allOf": [
|
|
1186
1533
|
{
|
|
1187
1534
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -1209,19 +1556,31 @@
|
|
|
1209
1556
|
"description": "Restricts the variable to a specific set of allowed values. The 'default' value must be one of these values when enum is present. The variable name (the map key in Server.variables) must exactly match a {placeholder} token in the parent server's URL string."
|
|
1210
1557
|
},
|
|
1211
1558
|
"description": {
|
|
1212
|
-
"type": "string"
|
|
1559
|
+
"type": "string",
|
|
1560
|
+
"description": "Optional human-readable explanation of what the placeholder represents, such as tenant subdomain or deployment region; CommonMark is allowed. Set it whenever the variable's purpose is not obvious from its name."
|
|
1213
1561
|
}
|
|
1214
1562
|
},
|
|
1215
1563
|
"required": ["default"],
|
|
1216
1564
|
"additionalProperties": false
|
|
1217
1565
|
}
|
|
1218
1566
|
},
|
|
1567
|
+
"x-dr-standard": "OpenAPI 3.0 Server Variable Object",
|
|
1568
|
+
"x-dr-evidence": [
|
|
1569
|
+
"An OpenAPI YAML/JSON 'servers' entry whose url contains {tenant} or {env}, with a matching 'variables' map entry declaring 'default' and optionally 'enum'.",
|
|
1570
|
+
"A springdoc/swagger-annotations @ServerVariable(name=..., defaultValue=..., allowableValues=...) nested inside a @Server annotation. Alternatively, a FastAPI/swagger-jsdoc servers definition carrying a 'variables' dict.",
|
|
1571
|
+
"A generated API client exposing a server_variables/serverVariables configuration map, with documented defaults and allowed values used to build the base URL."
|
|
1572
|
+
],
|
|
1573
|
+
"x-dr-distinguish": {
|
|
1574
|
+
"api.server": "the element is the server URL template itself, or a concrete fixed base URL with no substitutable placeholder, rather than the definition of one placeholder within it.",
|
|
1575
|
+
"api.parameter": "the placeholder sits in a path template such as /users/{id}, or is a query, header or cookie input. Such inputs are supplied per request by the caller, not when the client selects its base URL.",
|
|
1576
|
+
"api.example": "the value is only an illustrative sample for a request, response or parameter, not a default or allowed value constraining a server URL token."
|
|
1577
|
+
},
|
|
1219
1578
|
"$id": "urn:dr:spec:node:api.servervariable"
|
|
1220
1579
|
},
|
|
1221
1580
|
"tag": {
|
|
1222
1581
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
1223
1582
|
"title": "Tag",
|
|
1224
|
-
"description": "A
|
|
1583
|
+
"description": "A named label in an OpenAPI document, declared in the root 'tags' array or listed in an Operation's 'tags' field, that groups operations into categories for documentation and tooling. It carries only descriptive metadata and has no effect on routing, validation or security. Use PathItem instead when the grouping is defined by a shared URL path pattern, such as all methods on /users/{id}, rather than by a free-form category name. Use ExternalDocumentation instead when the element is the URL and description of an outside documentation resource, even one attached to a tag. Use Components instead when the element is a registry of reusable objects referenced via $ref rather than a categorisation label for operations. Use Info instead when the metadata describes the API as a whole (title, version, terms) rather than one category of operations.",
|
|
1225
1584
|
"allOf": [
|
|
1226
1585
|
{
|
|
1227
1586
|
"$ref": "urn:dr:spec:base:spec-node"
|
|
@@ -1241,103 +1600,88 @@
|
|
|
1241
1600
|
"type": "object",
|
|
1242
1601
|
"properties": {
|
|
1243
1602
|
"description": {
|
|
1244
|
-
"type": "string"
|
|
1603
|
+
"type": "string",
|
|
1604
|
+
"description": "A human-readable explanation of the category of operations this tag groups, in CommonMark per OpenAPI 3.0. Set it when the tag is declared at root level so documentation renderers can display a section introduction."
|
|
1245
1605
|
}
|
|
1246
1606
|
},
|
|
1247
1607
|
"additionalProperties": false
|
|
1248
1608
|
}
|
|
1249
1609
|
},
|
|
1610
|
+
"x-dr-standard": "OpenAPI 3.0 Tag Object",
|
|
1611
|
+
"x-dr-evidence": [
|
|
1612
|
+
"Controller or router annotations naming a category, e.g. NestJS @ApiTags('users'), springdoc @Tag(name = \"Orders\"), or Swagger 2 @Api(tags = \"...\")",
|
|
1613
|
+
"Router or decorator arguments listing tag names, e.g. FastAPI APIRouter(tags=[\"billing\"]) or @app.get(..., tags=[\"items\"])",
|
|
1614
|
+
"A root-level 'tags:' array in openapi.yaml or openapi.json whose entries have 'name' and 'description' fields, or generated client classes named after tags, such as UsersApi"
|
|
1615
|
+
],
|
|
1616
|
+
"x-dr-distinguish": {
|
|
1617
|
+
"api.pathitem": "the grouping is defined by a shared URL path pattern, such as all methods on /users/{id}, rather than by a free-form category name",
|
|
1618
|
+
"api.externaldocumentation": "the element is the URL and description of an outside documentation resource, even one attached to a tag",
|
|
1619
|
+
"api.components": "the element is a registry of reusable objects referenced via $ref rather than a categorisation label for operations",
|
|
1620
|
+
"api.info": "the metadata describes the API as a whole (title, version, terms) rather than one category of operations"
|
|
1621
|
+
},
|
|
1250
1622
|
"$id": "urn:dr:spec:node:api.tag"
|
|
1251
1623
|
}
|
|
1252
1624
|
},
|
|
1253
1625
|
"relationshipSchemas": {
|
|
1254
|
-
"api.callback.
|
|
1255
|
-
"id": "api.callback.
|
|
1626
|
+
"api.callback.composes.api.pathitem": {
|
|
1627
|
+
"id": "api.callback.composes.api.pathitem",
|
|
1256
1628
|
"source_spec_node_id": "api.callback",
|
|
1257
1629
|
"source_layer": "api",
|
|
1258
1630
|
"destination_spec_node_id": "api.pathitem",
|
|
1259
1631
|
"destination_layer": "api",
|
|
1260
|
-
"predicate": "
|
|
1261
|
-
"cardinality": "many-to-many",
|
|
1262
|
-
"strength": "medium",
|
|
1263
|
-
"required": false
|
|
1264
|
-
},
|
|
1265
|
-
"api.callback.uses.api.server": {
|
|
1266
|
-
"id": "api.callback.uses.api.server",
|
|
1267
|
-
"source_spec_node_id": "api.callback",
|
|
1268
|
-
"source_layer": "api",
|
|
1269
|
-
"destination_spec_node_id": "api.server",
|
|
1270
|
-
"destination_layer": "api",
|
|
1271
|
-
"predicate": "uses",
|
|
1632
|
+
"predicate": "composes",
|
|
1272
1633
|
"cardinality": "many-to-many",
|
|
1273
1634
|
"strength": "medium",
|
|
1274
|
-
"required": false
|
|
1635
|
+
"required": false,
|
|
1636
|
+
"description": "The path item is the request contract the API sends to the callback URL."
|
|
1275
1637
|
},
|
|
1276
|
-
"api.components.
|
|
1277
|
-
"id": "api.components.
|
|
1638
|
+
"api.components.composes.api.callback": {
|
|
1639
|
+
"id": "api.components.composes.api.callback",
|
|
1278
1640
|
"source_spec_node_id": "api.components",
|
|
1279
1641
|
"source_layer": "api",
|
|
1280
1642
|
"destination_spec_node_id": "api.callback",
|
|
1281
1643
|
"destination_layer": "api",
|
|
1282
|
-
"predicate": "
|
|
1644
|
+
"predicate": "composes",
|
|
1283
1645
|
"cardinality": "many-to-many",
|
|
1284
1646
|
"strength": "medium",
|
|
1285
|
-
"required": false
|
|
1647
|
+
"required": false,
|
|
1648
|
+
"description": "The callback is a reusable definition in the components registry."
|
|
1286
1649
|
},
|
|
1287
|
-
"api.components.
|
|
1288
|
-
"id": "api.components.
|
|
1650
|
+
"api.components.composes.api.example": {
|
|
1651
|
+
"id": "api.components.composes.api.example",
|
|
1289
1652
|
"source_spec_node_id": "api.components",
|
|
1290
1653
|
"source_layer": "api",
|
|
1291
1654
|
"destination_spec_node_id": "api.example",
|
|
1292
1655
|
"destination_layer": "api",
|
|
1293
|
-
"predicate": "
|
|
1294
|
-
"cardinality": "many-to-many",
|
|
1295
|
-
"strength": "medium",
|
|
1296
|
-
"required": false
|
|
1297
|
-
},
|
|
1298
|
-
"api.components.aggregates.link": {
|
|
1299
|
-
"id": "api.components.aggregates.link",
|
|
1300
|
-
"source_spec_node_id": "api.components",
|
|
1301
|
-
"source_layer": "api",
|
|
1302
|
-
"destination_spec_node_id": "api.link",
|
|
1303
|
-
"destination_layer": "api",
|
|
1304
|
-
"predicate": "aggregates",
|
|
1305
|
-
"cardinality": "many-to-many",
|
|
1306
|
-
"strength": "medium",
|
|
1307
|
-
"required": false
|
|
1308
|
-
},
|
|
1309
|
-
"api.components.aggregates.requestbody": {
|
|
1310
|
-
"id": "api.components.aggregates.requestbody",
|
|
1311
|
-
"source_spec_node_id": "api.components",
|
|
1312
|
-
"source_layer": "api",
|
|
1313
|
-
"destination_spec_node_id": "api.requestbody",
|
|
1314
|
-
"destination_layer": "api",
|
|
1315
|
-
"predicate": "aggregates",
|
|
1656
|
+
"predicate": "composes",
|
|
1316
1657
|
"cardinality": "many-to-many",
|
|
1317
1658
|
"strength": "medium",
|
|
1318
|
-
"required": false
|
|
1659
|
+
"required": false,
|
|
1660
|
+
"description": "The example is a reusable definition in the components registry."
|
|
1319
1661
|
},
|
|
1320
|
-
"api.components.
|
|
1321
|
-
"id": "api.components.
|
|
1662
|
+
"api.components.composes.api.header": {
|
|
1663
|
+
"id": "api.components.composes.api.header",
|
|
1322
1664
|
"source_spec_node_id": "api.components",
|
|
1323
1665
|
"source_layer": "api",
|
|
1324
|
-
"destination_spec_node_id": "api.
|
|
1666
|
+
"destination_spec_node_id": "api.header",
|
|
1325
1667
|
"destination_layer": "api",
|
|
1326
|
-
"predicate": "
|
|
1668
|
+
"predicate": "composes",
|
|
1327
1669
|
"cardinality": "many-to-many",
|
|
1328
1670
|
"strength": "medium",
|
|
1329
|
-
"required": false
|
|
1671
|
+
"required": false,
|
|
1672
|
+
"description": "The header is a reusable definition in the components registry."
|
|
1330
1673
|
},
|
|
1331
|
-
"api.components.composes.api.
|
|
1332
|
-
"id": "api.components.composes.api.
|
|
1674
|
+
"api.components.composes.api.link": {
|
|
1675
|
+
"id": "api.components.composes.api.link",
|
|
1333
1676
|
"source_spec_node_id": "api.components",
|
|
1334
1677
|
"source_layer": "api",
|
|
1335
|
-
"destination_spec_node_id": "api.
|
|
1678
|
+
"destination_spec_node_id": "api.link",
|
|
1336
1679
|
"destination_layer": "api",
|
|
1337
1680
|
"predicate": "composes",
|
|
1338
1681
|
"cardinality": "many-to-many",
|
|
1339
1682
|
"strength": "medium",
|
|
1340
|
-
"required": false
|
|
1683
|
+
"required": false,
|
|
1684
|
+
"description": "The link is a reusable definition in the components registry."
|
|
1341
1685
|
},
|
|
1342
1686
|
"api.components.composes.api.parameter": {
|
|
1343
1687
|
"id": "api.components.composes.api.parameter",
|
|
@@ -1348,18 +1692,20 @@
|
|
|
1348
1692
|
"predicate": "composes",
|
|
1349
1693
|
"cardinality": "many-to-many",
|
|
1350
1694
|
"strength": "medium",
|
|
1351
|
-
"required": false
|
|
1695
|
+
"required": false,
|
|
1696
|
+
"description": "The parameter is a reusable definition in the components registry."
|
|
1352
1697
|
},
|
|
1353
|
-
"api.components.composes.api.
|
|
1354
|
-
"id": "api.components.composes.api.
|
|
1698
|
+
"api.components.composes.api.requestbody": {
|
|
1699
|
+
"id": "api.components.composes.api.requestbody",
|
|
1355
1700
|
"source_spec_node_id": "api.components",
|
|
1356
1701
|
"source_layer": "api",
|
|
1357
|
-
"destination_spec_node_id": "api.
|
|
1702
|
+
"destination_spec_node_id": "api.requestbody",
|
|
1358
1703
|
"destination_layer": "api",
|
|
1359
1704
|
"predicate": "composes",
|
|
1360
1705
|
"cardinality": "many-to-many",
|
|
1361
1706
|
"strength": "medium",
|
|
1362
|
-
"required": false
|
|
1707
|
+
"required": false,
|
|
1708
|
+
"description": "The request body is a reusable definition in the components registry."
|
|
1363
1709
|
},
|
|
1364
1710
|
"api.components.composes.api.response": {
|
|
1365
1711
|
"id": "api.components.composes.api.response",
|
|
@@ -1370,18 +1716,8 @@
|
|
|
1370
1716
|
"predicate": "composes",
|
|
1371
1717
|
"cardinality": "many-to-many",
|
|
1372
1718
|
"strength": "medium",
|
|
1373
|
-
"required": false
|
|
1374
|
-
|
|
1375
|
-
"api.components.composes.api.responses": {
|
|
1376
|
-
"id": "api.components.composes.api.responses",
|
|
1377
|
-
"source_spec_node_id": "api.components",
|
|
1378
|
-
"source_layer": "api",
|
|
1379
|
-
"destination_spec_node_id": "api.responses",
|
|
1380
|
-
"destination_layer": "api",
|
|
1381
|
-
"predicate": "composes",
|
|
1382
|
-
"cardinality": "many-to-many",
|
|
1383
|
-
"strength": "medium",
|
|
1384
|
-
"required": false
|
|
1719
|
+
"required": false,
|
|
1720
|
+
"description": "The response is a reusable definition in the components registry."
|
|
1385
1721
|
},
|
|
1386
1722
|
"api.components.composes.api.schema": {
|
|
1387
1723
|
"id": "api.components.composes.api.schema",
|
|
@@ -1392,7 +1728,8 @@
|
|
|
1392
1728
|
"predicate": "composes",
|
|
1393
1729
|
"cardinality": "many-to-many",
|
|
1394
1730
|
"strength": "medium",
|
|
1395
|
-
"required": false
|
|
1731
|
+
"required": false,
|
|
1732
|
+
"description": "The schema is a named, reusable definition in the components registry."
|
|
1396
1733
|
},
|
|
1397
1734
|
"api.components.composes.api.securityscheme": {
|
|
1398
1735
|
"id": "api.components.composes.api.securityscheme",
|
|
@@ -1403,997 +1740,587 @@
|
|
|
1403
1740
|
"predicate": "composes",
|
|
1404
1741
|
"cardinality": "many-to-many",
|
|
1405
1742
|
"strength": "medium",
|
|
1406
|
-
"required": false
|
|
1407
|
-
|
|
1408
|
-
"api.contact.associated-with.api.openapidocument": {
|
|
1409
|
-
"id": "api.contact.associated-with.api.openapidocument",
|
|
1410
|
-
"source_spec_node_id": "api.contact",
|
|
1411
|
-
"source_layer": "api",
|
|
1412
|
-
"destination_spec_node_id": "api.openapidocument",
|
|
1413
|
-
"destination_layer": "api",
|
|
1414
|
-
"predicate": "associated-with",
|
|
1415
|
-
"cardinality": "many-to-many",
|
|
1416
|
-
"strength": "medium",
|
|
1417
|
-
"required": false
|
|
1743
|
+
"required": false,
|
|
1744
|
+
"description": "The security scheme is declared in the components registry."
|
|
1418
1745
|
},
|
|
1419
|
-
"api.encoding.
|
|
1420
|
-
"id": "api.encoding.
|
|
1746
|
+
"api.encoding.references.api.header": {
|
|
1747
|
+
"id": "api.encoding.references.api.header",
|
|
1421
1748
|
"source_spec_node_id": "api.encoding",
|
|
1422
1749
|
"source_layer": "api",
|
|
1423
|
-
"destination_spec_node_id": "api.
|
|
1750
|
+
"destination_spec_node_id": "api.header",
|
|
1424
1751
|
"destination_layer": "api",
|
|
1425
|
-
"predicate": "
|
|
1752
|
+
"predicate": "references",
|
|
1426
1753
|
"cardinality": "many-to-many",
|
|
1427
1754
|
"strength": "medium",
|
|
1428
|
-
"required": false
|
|
1755
|
+
"required": false,
|
|
1756
|
+
"description": "The encoding's part carries the header, by $ref."
|
|
1429
1757
|
},
|
|
1430
|
-
"api.
|
|
1431
|
-
"id": "api.
|
|
1432
|
-
"source_spec_node_id": "api.
|
|
1758
|
+
"api.header.references.api.example": {
|
|
1759
|
+
"id": "api.header.references.api.example",
|
|
1760
|
+
"source_spec_node_id": "api.header",
|
|
1433
1761
|
"source_layer": "api",
|
|
1434
|
-
"destination_spec_node_id": "api.
|
|
1762
|
+
"destination_spec_node_id": "api.example",
|
|
1435
1763
|
"destination_layer": "api",
|
|
1436
|
-
"predicate": "
|
|
1764
|
+
"predicate": "references",
|
|
1437
1765
|
"cardinality": "many-to-many",
|
|
1438
1766
|
"strength": "medium",
|
|
1439
|
-
"required": false
|
|
1767
|
+
"required": false,
|
|
1768
|
+
"description": "The header's example, by $ref to a reusable example."
|
|
1440
1769
|
},
|
|
1441
|
-
"api.
|
|
1442
|
-
"id": "api.
|
|
1443
|
-
"source_spec_node_id": "api.
|
|
1770
|
+
"api.header.references.api.schema": {
|
|
1771
|
+
"id": "api.header.references.api.schema",
|
|
1772
|
+
"source_spec_node_id": "api.header",
|
|
1444
1773
|
"source_layer": "api",
|
|
1445
|
-
"destination_spec_node_id": "api.
|
|
1774
|
+
"destination_spec_node_id": "api.schema",
|
|
1446
1775
|
"destination_layer": "api",
|
|
1447
|
-
"predicate": "
|
|
1776
|
+
"predicate": "references",
|
|
1448
1777
|
"cardinality": "many-to-many",
|
|
1449
1778
|
"strength": "medium",
|
|
1450
|
-
"required": false
|
|
1779
|
+
"required": false,
|
|
1780
|
+
"description": "The header's value follows the schema, by $ref."
|
|
1451
1781
|
},
|
|
1452
|
-
"api.
|
|
1453
|
-
"id": "api.
|
|
1454
|
-
"source_spec_node_id": "api.
|
|
1782
|
+
"api.header.specializes.api.parameter": {
|
|
1783
|
+
"id": "api.header.specializes.api.parameter",
|
|
1784
|
+
"source_spec_node_id": "api.header",
|
|
1455
1785
|
"source_layer": "api",
|
|
1456
|
-
"destination_spec_node_id": "api.
|
|
1786
|
+
"destination_spec_node_id": "api.parameter",
|
|
1457
1787
|
"destination_layer": "api",
|
|
1458
|
-
"predicate": "
|
|
1788
|
+
"predicate": "specializes",
|
|
1459
1789
|
"cardinality": "many-to-many",
|
|
1460
1790
|
"strength": "medium",
|
|
1461
|
-
"required": false
|
|
1791
|
+
"required": false,
|
|
1792
|
+
"description": "A header follows the Parameter structure without name and in."
|
|
1462
1793
|
},
|
|
1463
|
-
"api.
|
|
1464
|
-
"id": "api.
|
|
1465
|
-
"source_spec_node_id": "api.
|
|
1794
|
+
"api.info.composes.api.contact": {
|
|
1795
|
+
"id": "api.info.composes.api.contact",
|
|
1796
|
+
"source_spec_node_id": "api.info",
|
|
1466
1797
|
"source_layer": "api",
|
|
1467
|
-
"destination_spec_node_id": "api.
|
|
1798
|
+
"destination_spec_node_id": "api.contact",
|
|
1468
1799
|
"destination_layer": "api",
|
|
1469
|
-
"predicate": "
|
|
1800
|
+
"predicate": "composes",
|
|
1470
1801
|
"cardinality": "many-to-many",
|
|
1471
1802
|
"strength": "medium",
|
|
1472
|
-
"required": false
|
|
1803
|
+
"required": false,
|
|
1804
|
+
"description": "The contact is the info block's contact entry."
|
|
1473
1805
|
},
|
|
1474
|
-
"api.
|
|
1475
|
-
"id": "api.
|
|
1476
|
-
"source_spec_node_id": "api.
|
|
1806
|
+
"api.info.composes.api.license": {
|
|
1807
|
+
"id": "api.info.composes.api.license",
|
|
1808
|
+
"source_spec_node_id": "api.info",
|
|
1477
1809
|
"source_layer": "api",
|
|
1478
|
-
"destination_spec_node_id": "api.
|
|
1810
|
+
"destination_spec_node_id": "api.license",
|
|
1479
1811
|
"destination_layer": "api",
|
|
1480
|
-
"predicate": "
|
|
1812
|
+
"predicate": "composes",
|
|
1481
1813
|
"cardinality": "many-to-many",
|
|
1482
1814
|
"strength": "medium",
|
|
1483
|
-
"required": false
|
|
1815
|
+
"required": false,
|
|
1816
|
+
"description": "The license is the info block's license entry."
|
|
1484
1817
|
},
|
|
1485
|
-
"api.
|
|
1486
|
-
"id": "api.
|
|
1487
|
-
"source_spec_node_id": "api.
|
|
1818
|
+
"api.link.references.api.operation": {
|
|
1819
|
+
"id": "api.link.references.api.operation",
|
|
1820
|
+
"source_spec_node_id": "api.link",
|
|
1488
1821
|
"source_layer": "api",
|
|
1489
|
-
"destination_spec_node_id": "api.
|
|
1822
|
+
"destination_spec_node_id": "api.operation",
|
|
1490
1823
|
"destination_layer": "api",
|
|
1491
1824
|
"predicate": "references",
|
|
1492
1825
|
"cardinality": "many-to-many",
|
|
1493
1826
|
"strength": "medium",
|
|
1494
|
-
"required": false
|
|
1827
|
+
"required": false,
|
|
1828
|
+
"description": "The link points to the operation it describes, by operationId or operationRef."
|
|
1495
1829
|
},
|
|
1496
|
-
"api.
|
|
1497
|
-
"id": "api.
|
|
1498
|
-
"source_spec_node_id": "api.
|
|
1830
|
+
"api.link.uses.api.server": {
|
|
1831
|
+
"id": "api.link.uses.api.server",
|
|
1832
|
+
"source_spec_node_id": "api.link",
|
|
1499
1833
|
"source_layer": "api",
|
|
1500
|
-
"destination_spec_node_id": "api.
|
|
1834
|
+
"destination_spec_node_id": "api.server",
|
|
1501
1835
|
"destination_layer": "api",
|
|
1502
|
-
"predicate": "
|
|
1836
|
+
"predicate": "uses",
|
|
1503
1837
|
"cardinality": "many-to-many",
|
|
1504
1838
|
"strength": "medium",
|
|
1505
|
-
"required": false
|
|
1839
|
+
"required": false,
|
|
1840
|
+
"description": "The linked operation is called on the server instead of the default."
|
|
1506
1841
|
},
|
|
1507
|
-
"api.
|
|
1508
|
-
"id": "api.
|
|
1509
|
-
"source_spec_node_id": "api.
|
|
1842
|
+
"api.mediatype.composes.api.encoding": {
|
|
1843
|
+
"id": "api.mediatype.composes.api.encoding",
|
|
1844
|
+
"source_spec_node_id": "api.mediatype",
|
|
1510
1845
|
"source_layer": "api",
|
|
1511
|
-
"destination_spec_node_id": "api.
|
|
1846
|
+
"destination_spec_node_id": "api.encoding",
|
|
1512
1847
|
"destination_layer": "api",
|
|
1513
|
-
"predicate": "
|
|
1848
|
+
"predicate": "composes",
|
|
1514
1849
|
"cardinality": "many-to-many",
|
|
1515
1850
|
"strength": "medium",
|
|
1516
|
-
"required": false
|
|
1851
|
+
"required": false,
|
|
1852
|
+
"description": "The encoding fixes how one property of the media type's payload is serialized."
|
|
1517
1853
|
},
|
|
1518
|
-
"api.
|
|
1519
|
-
"id": "api.
|
|
1520
|
-
"source_spec_node_id": "api.
|
|
1854
|
+
"api.mediatype.composes.api.example": {
|
|
1855
|
+
"id": "api.mediatype.composes.api.example",
|
|
1856
|
+
"source_spec_node_id": "api.mediatype",
|
|
1521
1857
|
"source_layer": "api",
|
|
1522
|
-
"destination_spec_node_id": "api.
|
|
1858
|
+
"destination_spec_node_id": "api.example",
|
|
1523
1859
|
"destination_layer": "api",
|
|
1524
|
-
"predicate": "
|
|
1860
|
+
"predicate": "composes",
|
|
1525
1861
|
"cardinality": "many-to-many",
|
|
1526
1862
|
"strength": "medium",
|
|
1527
|
-
"required": false
|
|
1863
|
+
"required": false,
|
|
1864
|
+
"description": "The example is defined in place in the media type's examples."
|
|
1528
1865
|
},
|
|
1529
|
-
"api.
|
|
1530
|
-
"id": "api.
|
|
1531
|
-
"source_spec_node_id": "api.
|
|
1866
|
+
"api.mediatype.composes.api.schema": {
|
|
1867
|
+
"id": "api.mediatype.composes.api.schema",
|
|
1868
|
+
"source_spec_node_id": "api.mediatype",
|
|
1532
1869
|
"source_layer": "api",
|
|
1533
1870
|
"destination_spec_node_id": "api.schema",
|
|
1534
1871
|
"destination_layer": "api",
|
|
1535
|
-
"predicate": "
|
|
1536
|
-
"cardinality": "many-to-many",
|
|
1537
|
-
"strength": "medium",
|
|
1538
|
-
"required": false
|
|
1539
|
-
},
|
|
1540
|
-
"api.header.associated-with.api.securityscheme": {
|
|
1541
|
-
"id": "api.header.associated-with.api.securityscheme",
|
|
1542
|
-
"source_spec_node_id": "api.header",
|
|
1543
|
-
"source_layer": "api",
|
|
1544
|
-
"destination_spec_node_id": "api.securityscheme",
|
|
1545
|
-
"destination_layer": "api",
|
|
1546
|
-
"predicate": "associated-with",
|
|
1872
|
+
"predicate": "composes",
|
|
1547
1873
|
"cardinality": "many-to-many",
|
|
1548
1874
|
"strength": "medium",
|
|
1549
|
-
"required": false
|
|
1875
|
+
"required": false,
|
|
1876
|
+
"description": "The payload's schema is defined in place in the media type."
|
|
1550
1877
|
},
|
|
1551
|
-
"api.
|
|
1552
|
-
"id": "api.
|
|
1553
|
-
"source_spec_node_id": "api.
|
|
1878
|
+
"api.mediatype.references.api.example": {
|
|
1879
|
+
"id": "api.mediatype.references.api.example",
|
|
1880
|
+
"source_spec_node_id": "api.mediatype",
|
|
1554
1881
|
"source_layer": "api",
|
|
1555
1882
|
"destination_spec_node_id": "api.example",
|
|
1556
1883
|
"destination_layer": "api",
|
|
1557
1884
|
"predicate": "references",
|
|
1558
1885
|
"cardinality": "many-to-many",
|
|
1559
1886
|
"strength": "medium",
|
|
1560
|
-
"required": false
|
|
1887
|
+
"required": false,
|
|
1888
|
+
"description": "The media type's example, by $ref to a reusable example."
|
|
1561
1889
|
},
|
|
1562
|
-
"api.
|
|
1563
|
-
"id": "api.
|
|
1564
|
-
"source_spec_node_id": "api.
|
|
1890
|
+
"api.mediatype.references.api.schema": {
|
|
1891
|
+
"id": "api.mediatype.references.api.schema",
|
|
1892
|
+
"source_spec_node_id": "api.mediatype",
|
|
1565
1893
|
"source_layer": "api",
|
|
1566
1894
|
"destination_spec_node_id": "api.schema",
|
|
1567
1895
|
"destination_layer": "api",
|
|
1568
1896
|
"predicate": "references",
|
|
1569
1897
|
"cardinality": "many-to-many",
|
|
1570
1898
|
"strength": "medium",
|
|
1571
|
-
"required": false
|
|
1899
|
+
"required": false,
|
|
1900
|
+
"description": "The payload follows the schema, by $ref to a components schema."
|
|
1572
1901
|
},
|
|
1573
|
-
"api.
|
|
1574
|
-
"id": "api.
|
|
1575
|
-
"source_spec_node_id": "api.
|
|
1902
|
+
"api.oauthflows.composes.api.oauthflow": {
|
|
1903
|
+
"id": "api.oauthflows.composes.api.oauthflow",
|
|
1904
|
+
"source_spec_node_id": "api.oauthflows",
|
|
1576
1905
|
"source_layer": "api",
|
|
1577
|
-
"destination_spec_node_id": "api.
|
|
1906
|
+
"destination_spec_node_id": "api.oauthflow",
|
|
1578
1907
|
"destination_layer": "api",
|
|
1579
|
-
"predicate": "
|
|
1908
|
+
"predicate": "composes",
|
|
1580
1909
|
"cardinality": "many-to-many",
|
|
1581
1910
|
"strength": "medium",
|
|
1582
|
-
"required": false
|
|
1911
|
+
"required": false,
|
|
1912
|
+
"description": "The flow is one supported OAuth 2.0 grant type."
|
|
1583
1913
|
},
|
|
1584
|
-
"api.
|
|
1585
|
-
"id": "api.
|
|
1586
|
-
"source_spec_node_id": "api.
|
|
1914
|
+
"api.openapidocument.composes.api.components": {
|
|
1915
|
+
"id": "api.openapidocument.composes.api.components",
|
|
1916
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1587
1917
|
"source_layer": "api",
|
|
1588
|
-
"destination_spec_node_id": "api.
|
|
1918
|
+
"destination_spec_node_id": "api.components",
|
|
1589
1919
|
"destination_layer": "api",
|
|
1590
|
-
"predicate": "
|
|
1920
|
+
"predicate": "composes",
|
|
1591
1921
|
"cardinality": "many-to-many",
|
|
1592
1922
|
"strength": "medium",
|
|
1593
|
-
"required": false
|
|
1923
|
+
"required": false,
|
|
1924
|
+
"description": "The components registry belongs to the document."
|
|
1594
1925
|
},
|
|
1595
|
-
"api.
|
|
1596
|
-
"id": "api.
|
|
1597
|
-
"source_spec_node_id": "api.
|
|
1926
|
+
"api.openapidocument.composes.api.info": {
|
|
1927
|
+
"id": "api.openapidocument.composes.api.info",
|
|
1928
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1598
1929
|
"source_layer": "api",
|
|
1599
|
-
"destination_spec_node_id": "api.
|
|
1930
|
+
"destination_spec_node_id": "api.info",
|
|
1600
1931
|
"destination_layer": "api",
|
|
1601
|
-
"predicate": "
|
|
1932
|
+
"predicate": "composes",
|
|
1602
1933
|
"cardinality": "many-to-many",
|
|
1603
1934
|
"strength": "medium",
|
|
1604
|
-
"required": false
|
|
1935
|
+
"required": false,
|
|
1936
|
+
"description": "The info block describes the document's API."
|
|
1605
1937
|
},
|
|
1606
|
-
"api.
|
|
1607
|
-
"id": "api.
|
|
1608
|
-
"source_spec_node_id": "api.
|
|
1938
|
+
"api.openapidocument.composes.api.paths": {
|
|
1939
|
+
"id": "api.openapidocument.composes.api.paths",
|
|
1940
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1609
1941
|
"source_layer": "api",
|
|
1610
|
-
"destination_spec_node_id": "api.
|
|
1942
|
+
"destination_spec_node_id": "api.paths",
|
|
1611
1943
|
"destination_layer": "api",
|
|
1612
|
-
"predicate": "
|
|
1944
|
+
"predicate": "composes",
|
|
1613
1945
|
"cardinality": "many-to-many",
|
|
1614
1946
|
"strength": "medium",
|
|
1615
|
-
"required": false
|
|
1947
|
+
"required": false,
|
|
1948
|
+
"description": "The paths map lists the document's endpoints."
|
|
1616
1949
|
},
|
|
1617
|
-
"api.
|
|
1618
|
-
"id": "api.
|
|
1619
|
-
"source_spec_node_id": "api.
|
|
1950
|
+
"api.openapidocument.composes.api.server": {
|
|
1951
|
+
"id": "api.openapidocument.composes.api.server",
|
|
1952
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1620
1953
|
"source_layer": "api",
|
|
1621
|
-
"destination_spec_node_id": "api.
|
|
1954
|
+
"destination_spec_node_id": "api.server",
|
|
1622
1955
|
"destination_layer": "api",
|
|
1623
|
-
"predicate": "
|
|
1956
|
+
"predicate": "composes",
|
|
1624
1957
|
"cardinality": "many-to-many",
|
|
1625
1958
|
"strength": "medium",
|
|
1626
|
-
"required": false
|
|
1959
|
+
"required": false,
|
|
1960
|
+
"description": "The server is one of the document's default base URLs."
|
|
1627
1961
|
},
|
|
1628
|
-
"api.
|
|
1629
|
-
"id": "api.
|
|
1630
|
-
"source_spec_node_id": "api.
|
|
1962
|
+
"api.openapidocument.composes.api.tag": {
|
|
1963
|
+
"id": "api.openapidocument.composes.api.tag",
|
|
1964
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1631
1965
|
"source_layer": "api",
|
|
1632
|
-
"destination_spec_node_id": "api.
|
|
1966
|
+
"destination_spec_node_id": "api.tag",
|
|
1633
1967
|
"destination_layer": "api",
|
|
1634
|
-
"predicate": "
|
|
1968
|
+
"predicate": "composes",
|
|
1635
1969
|
"cardinality": "many-to-many",
|
|
1636
1970
|
"strength": "medium",
|
|
1637
|
-
"required": false
|
|
1971
|
+
"required": false,
|
|
1972
|
+
"description": "The tag is declared in the document's tags list."
|
|
1638
1973
|
},
|
|
1639
|
-
"api.
|
|
1640
|
-
"id": "api.
|
|
1641
|
-
"source_spec_node_id": "api.
|
|
1974
|
+
"api.openapidocument.realizes.application.applicationservice": {
|
|
1975
|
+
"id": "api.openapidocument.realizes.application.applicationservice",
|
|
1976
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1642
1977
|
"source_layer": "api",
|
|
1643
|
-
"destination_spec_node_id": "
|
|
1644
|
-
"destination_layer": "
|
|
1645
|
-
"predicate": "
|
|
1978
|
+
"destination_spec_node_id": "application.applicationservice",
|
|
1979
|
+
"destination_layer": "application",
|
|
1980
|
+
"predicate": "realizes",
|
|
1646
1981
|
"cardinality": "many-to-many",
|
|
1647
1982
|
"strength": "medium",
|
|
1648
|
-
"required": false
|
|
1983
|
+
"required": false,
|
|
1984
|
+
"description": "The document is the published contract of the application service."
|
|
1649
1985
|
},
|
|
1650
|
-
"api.
|
|
1651
|
-
"id": "api.
|
|
1652
|
-
"source_spec_node_id": "api.
|
|
1986
|
+
"api.openapidocument.references.api.externaldocumentation": {
|
|
1987
|
+
"id": "api.openapidocument.references.api.externaldocumentation",
|
|
1988
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1653
1989
|
"source_layer": "api",
|
|
1654
|
-
"destination_spec_node_id": "api.
|
|
1990
|
+
"destination_spec_node_id": "api.externaldocumentation",
|
|
1655
1991
|
"destination_layer": "api",
|
|
1656
1992
|
"predicate": "references",
|
|
1657
1993
|
"cardinality": "many-to-many",
|
|
1658
1994
|
"strength": "medium",
|
|
1659
|
-
"required": false
|
|
1995
|
+
"required": false,
|
|
1996
|
+
"description": "The document's externalDocs."
|
|
1660
1997
|
},
|
|
1661
|
-
"api.
|
|
1662
|
-
"id": "api.
|
|
1663
|
-
"source_spec_node_id": "api.
|
|
1998
|
+
"api.openapidocument.requires.api.securityscheme": {
|
|
1999
|
+
"id": "api.openapidocument.requires.api.securityscheme",
|
|
2000
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1664
2001
|
"source_layer": "api",
|
|
1665
|
-
"destination_spec_node_id": "api.
|
|
2002
|
+
"destination_spec_node_id": "api.securityscheme",
|
|
1666
2003
|
"destination_layer": "api",
|
|
1667
|
-
"predicate": "
|
|
2004
|
+
"predicate": "requires",
|
|
1668
2005
|
"cardinality": "many-to-many",
|
|
1669
2006
|
"strength": "medium",
|
|
1670
|
-
"required": false
|
|
2007
|
+
"required": false,
|
|
2008
|
+
"description": "The document's default security requirement uses the scheme."
|
|
1671
2009
|
},
|
|
1672
|
-
"api.
|
|
1673
|
-
"id": "api.
|
|
1674
|
-
"source_spec_node_id": "api.
|
|
2010
|
+
"api.openapidocument.serves.application.applicationcomponent": {
|
|
2011
|
+
"id": "api.openapidocument.serves.application.applicationcomponent",
|
|
2012
|
+
"source_spec_node_id": "api.openapidocument",
|
|
1675
2013
|
"source_layer": "api",
|
|
1676
|
-
"destination_spec_node_id": "
|
|
1677
|
-
"destination_layer": "
|
|
1678
|
-
"predicate": "
|
|
2014
|
+
"destination_spec_node_id": "application.applicationcomponent",
|
|
2015
|
+
"destination_layer": "application",
|
|
2016
|
+
"predicate": "serves",
|
|
1679
2017
|
"cardinality": "many-to-many",
|
|
1680
2018
|
"strength": "medium",
|
|
1681
|
-
"required": false
|
|
2019
|
+
"required": false,
|
|
2020
|
+
"description": "The component consumes the API the document describes, such as a generated client."
|
|
1682
2021
|
},
|
|
1683
|
-
"api.
|
|
1684
|
-
"id": "api.
|
|
1685
|
-
"source_spec_node_id": "api.
|
|
2022
|
+
"api.operation.composes.api.callback": {
|
|
2023
|
+
"id": "api.operation.composes.api.callback",
|
|
2024
|
+
"source_spec_node_id": "api.operation",
|
|
1686
2025
|
"source_layer": "api",
|
|
1687
|
-
"destination_spec_node_id": "api.
|
|
2026
|
+
"destination_spec_node_id": "api.callback",
|
|
1688
2027
|
"destination_layer": "api",
|
|
1689
|
-
"predicate": "
|
|
2028
|
+
"predicate": "composes",
|
|
1690
2029
|
"cardinality": "many-to-many",
|
|
1691
2030
|
"strength": "medium",
|
|
1692
|
-
"required": false
|
|
2031
|
+
"required": false,
|
|
2032
|
+
"description": "The callback is one of the operation's callbacks."
|
|
1693
2033
|
},
|
|
1694
|
-
"api.
|
|
1695
|
-
"id": "api.
|
|
1696
|
-
"source_spec_node_id": "api.
|
|
2034
|
+
"api.operation.composes.api.parameter": {
|
|
2035
|
+
"id": "api.operation.composes.api.parameter",
|
|
2036
|
+
"source_spec_node_id": "api.operation",
|
|
1697
2037
|
"source_layer": "api",
|
|
1698
|
-
"destination_spec_node_id": "api.
|
|
2038
|
+
"destination_spec_node_id": "api.parameter",
|
|
1699
2039
|
"destination_layer": "api",
|
|
1700
|
-
"predicate": "
|
|
2040
|
+
"predicate": "composes",
|
|
1701
2041
|
"cardinality": "many-to-many",
|
|
1702
2042
|
"strength": "medium",
|
|
1703
|
-
"required": false
|
|
2043
|
+
"required": false,
|
|
2044
|
+
"description": "The parameter is an input of the operation."
|
|
1704
2045
|
},
|
|
1705
|
-
"api.
|
|
1706
|
-
"id": "api.
|
|
1707
|
-
"source_spec_node_id": "api.
|
|
2046
|
+
"api.operation.composes.api.requestbody": {
|
|
2047
|
+
"id": "api.operation.composes.api.requestbody",
|
|
2048
|
+
"source_spec_node_id": "api.operation",
|
|
1708
2049
|
"source_layer": "api",
|
|
1709
|
-
"destination_spec_node_id": "api.
|
|
2050
|
+
"destination_spec_node_id": "api.requestbody",
|
|
1710
2051
|
"destination_layer": "api",
|
|
1711
2052
|
"predicate": "composes",
|
|
1712
2053
|
"cardinality": "many-to-many",
|
|
1713
2054
|
"strength": "medium",
|
|
1714
|
-
"required": false
|
|
2055
|
+
"required": false,
|
|
2056
|
+
"description": "The request body is the payload the operation accepts."
|
|
1715
2057
|
},
|
|
1716
|
-
"api.
|
|
1717
|
-
"id": "api.
|
|
1718
|
-
"source_spec_node_id": "api.
|
|
2058
|
+
"api.operation.composes.api.responses": {
|
|
2059
|
+
"id": "api.operation.composes.api.responses",
|
|
2060
|
+
"source_spec_node_id": "api.operation",
|
|
1719
2061
|
"source_layer": "api",
|
|
1720
|
-
"destination_spec_node_id": "api.
|
|
2062
|
+
"destination_spec_node_id": "api.responses",
|
|
1721
2063
|
"destination_layer": "api",
|
|
1722
2064
|
"predicate": "composes",
|
|
1723
2065
|
"cardinality": "many-to-many",
|
|
1724
2066
|
"strength": "medium",
|
|
1725
|
-
"required": false
|
|
2067
|
+
"required": false,
|
|
2068
|
+
"description": "The responses map lists the operation's possible outcomes."
|
|
1726
2069
|
},
|
|
1727
|
-
"api.
|
|
1728
|
-
"id": "api.
|
|
1729
|
-
"source_spec_node_id": "api.
|
|
2070
|
+
"api.operation.composes.api.server": {
|
|
2071
|
+
"id": "api.operation.composes.api.server",
|
|
2072
|
+
"source_spec_node_id": "api.operation",
|
|
1730
2073
|
"source_layer": "api",
|
|
1731
|
-
"destination_spec_node_id": "api.
|
|
2074
|
+
"destination_spec_node_id": "api.server",
|
|
1732
2075
|
"destination_layer": "api",
|
|
1733
|
-
"predicate": "
|
|
2076
|
+
"predicate": "composes",
|
|
1734
2077
|
"cardinality": "many-to-many",
|
|
1735
2078
|
"strength": "medium",
|
|
1736
|
-
"required": false
|
|
2079
|
+
"required": false,
|
|
2080
|
+
"description": "The operation is called on the server instead of the path's or document's."
|
|
1737
2081
|
},
|
|
1738
|
-
"api.
|
|
1739
|
-
"id": "api.
|
|
1740
|
-
"source_spec_node_id": "api.
|
|
2082
|
+
"api.operation.exposes.product.feature": {
|
|
2083
|
+
"id": "api.operation.exposes.product.feature",
|
|
2084
|
+
"source_spec_node_id": "api.operation",
|
|
1741
2085
|
"source_layer": "api",
|
|
1742
|
-
"destination_spec_node_id": "
|
|
1743
|
-
"destination_layer": "
|
|
1744
|
-
"predicate": "
|
|
2086
|
+
"destination_spec_node_id": "product.feature",
|
|
2087
|
+
"destination_layer": "product",
|
|
2088
|
+
"predicate": "exposes",
|
|
1745
2089
|
"cardinality": "many-to-many",
|
|
1746
2090
|
"strength": "medium",
|
|
1747
|
-
"required": false
|
|
2091
|
+
"required": false,
|
|
2092
|
+
"description": "The operation makes the feature available to API consumers."
|
|
1748
2093
|
},
|
|
1749
|
-
"api.
|
|
1750
|
-
"id": "api.
|
|
1751
|
-
"source_spec_node_id": "api.
|
|
2094
|
+
"api.operation.realizes.application.applicationfunction": {
|
|
2095
|
+
"id": "api.operation.realizes.application.applicationfunction",
|
|
2096
|
+
"source_spec_node_id": "api.operation",
|
|
1752
2097
|
"source_layer": "api",
|
|
1753
|
-
"destination_spec_node_id": "
|
|
1754
|
-
"destination_layer": "
|
|
1755
|
-
"predicate": "
|
|
2098
|
+
"destination_spec_node_id": "application.applicationfunction",
|
|
2099
|
+
"destination_layer": "application",
|
|
2100
|
+
"predicate": "realizes",
|
|
1756
2101
|
"cardinality": "many-to-many",
|
|
1757
2102
|
"strength": "medium",
|
|
1758
|
-
"required": false
|
|
2103
|
+
"required": false,
|
|
2104
|
+
"description": "The operation is the HTTP contract for the application function behind it."
|
|
1759
2105
|
},
|
|
1760
|
-
"api.
|
|
1761
|
-
"id": "api.
|
|
1762
|
-
"source_spec_node_id": "api.
|
|
2106
|
+
"api.operation.realizes.security.countermeasure": {
|
|
2107
|
+
"id": "api.operation.realizes.security.countermeasure",
|
|
2108
|
+
"source_spec_node_id": "api.operation",
|
|
1763
2109
|
"source_layer": "api",
|
|
1764
|
-
"destination_spec_node_id": "
|
|
1765
|
-
"destination_layer": "
|
|
1766
|
-
"predicate": "
|
|
2110
|
+
"destination_spec_node_id": "security.countermeasure",
|
|
2111
|
+
"destination_layer": "security",
|
|
2112
|
+
"predicate": "realizes",
|
|
1767
2113
|
"cardinality": "many-to-many",
|
|
1768
2114
|
"strength": "medium",
|
|
1769
|
-
"required": false
|
|
2115
|
+
"required": false,
|
|
2116
|
+
"description": "The operation implements the countermeasure, such as an idempotency key check."
|
|
1770
2117
|
},
|
|
1771
|
-
"api.
|
|
1772
|
-
"id": "api.
|
|
1773
|
-
"source_spec_node_id": "api.
|
|
2118
|
+
"api.operation.references.application.applicationservice": {
|
|
2119
|
+
"id": "api.operation.references.application.applicationservice",
|
|
2120
|
+
"source_spec_node_id": "api.operation",
|
|
1774
2121
|
"source_layer": "api",
|
|
1775
|
-
"destination_spec_node_id": "
|
|
1776
|
-
"destination_layer": "
|
|
1777
|
-
"predicate": "
|
|
2122
|
+
"destination_spec_node_id": "application.applicationservice",
|
|
2123
|
+
"destination_layer": "application",
|
|
2124
|
+
"predicate": "references",
|
|
1778
2125
|
"cardinality": "many-to-many",
|
|
1779
2126
|
"strength": "medium",
|
|
1780
|
-
"required": false
|
|
2127
|
+
"required": false,
|
|
2128
|
+
"description": "The operation belongs to the application service."
|
|
1781
2129
|
},
|
|
1782
|
-
"api.
|
|
1783
|
-
"id": "api.
|
|
1784
|
-
"source_spec_node_id": "api.
|
|
2130
|
+
"api.operation.references.api.externaldocumentation": {
|
|
2131
|
+
"id": "api.operation.references.api.externaldocumentation",
|
|
2132
|
+
"source_spec_node_id": "api.operation",
|
|
1785
2133
|
"source_layer": "api",
|
|
1786
|
-
"destination_spec_node_id": "api.
|
|
2134
|
+
"destination_spec_node_id": "api.externaldocumentation",
|
|
1787
2135
|
"destination_layer": "api",
|
|
1788
|
-
"predicate": "
|
|
2136
|
+
"predicate": "references",
|
|
1789
2137
|
"cardinality": "many-to-many",
|
|
1790
2138
|
"strength": "medium",
|
|
1791
|
-
"required": false
|
|
2139
|
+
"required": false,
|
|
2140
|
+
"description": "The operation's externalDocs."
|
|
1792
2141
|
},
|
|
1793
|
-
"api.
|
|
1794
|
-
"id": "api.
|
|
1795
|
-
"source_spec_node_id": "api.
|
|
2142
|
+
"api.operation.references.security.secureresource": {
|
|
2143
|
+
"id": "api.operation.references.security.secureresource",
|
|
2144
|
+
"source_spec_node_id": "api.operation",
|
|
1796
2145
|
"source_layer": "api",
|
|
1797
|
-
"destination_spec_node_id": "
|
|
1798
|
-
"destination_layer": "
|
|
1799
|
-
"predicate": "
|
|
2146
|
+
"destination_spec_node_id": "security.secureresource",
|
|
2147
|
+
"destination_layer": "security",
|
|
2148
|
+
"predicate": "references",
|
|
1800
2149
|
"cardinality": "many-to-many",
|
|
1801
2150
|
"strength": "medium",
|
|
1802
|
-
"required": false
|
|
2151
|
+
"required": false,
|
|
2152
|
+
"description": "The operation acts on the protected resource."
|
|
1803
2153
|
},
|
|
1804
|
-
"api.
|
|
1805
|
-
"id": "api.
|
|
1806
|
-
"source_spec_node_id": "api.
|
|
2154
|
+
"api.operation.references.api.tag": {
|
|
2155
|
+
"id": "api.operation.references.api.tag",
|
|
2156
|
+
"source_spec_node_id": "api.operation",
|
|
1807
2157
|
"source_layer": "api",
|
|
1808
|
-
"destination_spec_node_id": "api.
|
|
2158
|
+
"destination_spec_node_id": "api.tag",
|
|
1809
2159
|
"destination_layer": "api",
|
|
1810
2160
|
"predicate": "references",
|
|
1811
2161
|
"cardinality": "many-to-many",
|
|
1812
2162
|
"strength": "medium",
|
|
1813
|
-
"required": false
|
|
2163
|
+
"required": false,
|
|
2164
|
+
"description": "The operation lists the tag."
|
|
1814
2165
|
},
|
|
1815
|
-
"api.
|
|
1816
|
-
"id": "api.
|
|
1817
|
-
"source_spec_node_id": "api.
|
|
2166
|
+
"api.operation.references.security.threat": {
|
|
2167
|
+
"id": "api.operation.references.security.threat",
|
|
2168
|
+
"source_spec_node_id": "api.operation",
|
|
1818
2169
|
"source_layer": "api",
|
|
1819
|
-
"destination_spec_node_id": "
|
|
1820
|
-
"destination_layer": "
|
|
1821
|
-
"predicate": "
|
|
2170
|
+
"destination_spec_node_id": "security.threat",
|
|
2171
|
+
"destination_layer": "security",
|
|
2172
|
+
"predicate": "references",
|
|
1822
2173
|
"cardinality": "many-to-many",
|
|
1823
2174
|
"strength": "medium",
|
|
1824
|
-
"required": false
|
|
2175
|
+
"required": false,
|
|
2176
|
+
"description": "The operation is exposed to the threat, such as an endpoint open to enumeration."
|
|
1825
2177
|
},
|
|
1826
|
-
"api.
|
|
1827
|
-
"id": "api.
|
|
1828
|
-
"source_spec_node_id": "api.
|
|
2178
|
+
"api.operation.requires.security.permission": {
|
|
2179
|
+
"id": "api.operation.requires.security.permission",
|
|
2180
|
+
"source_spec_node_id": "api.operation",
|
|
1829
2181
|
"source_layer": "api",
|
|
1830
|
-
"destination_spec_node_id": "
|
|
1831
|
-
"destination_layer": "
|
|
1832
|
-
"predicate": "
|
|
2182
|
+
"destination_spec_node_id": "security.permission",
|
|
2183
|
+
"destination_layer": "security",
|
|
2184
|
+
"predicate": "requires",
|
|
1833
2185
|
"cardinality": "many-to-many",
|
|
1834
2186
|
"strength": "medium",
|
|
1835
|
-
"required": false
|
|
2187
|
+
"required": false,
|
|
2188
|
+
"description": "Calling the operation needs the permission."
|
|
1836
2189
|
},
|
|
1837
|
-
"api.
|
|
1838
|
-
"id": "api.
|
|
1839
|
-
"source_spec_node_id": "api.
|
|
2190
|
+
"api.operation.requires.security.securitypolicy": {
|
|
2191
|
+
"id": "api.operation.requires.security.securitypolicy",
|
|
2192
|
+
"source_spec_node_id": "api.operation",
|
|
1840
2193
|
"source_layer": "api",
|
|
1841
|
-
"destination_spec_node_id": "
|
|
1842
|
-
"destination_layer": "
|
|
1843
|
-
"predicate": "
|
|
2194
|
+
"destination_spec_node_id": "security.securitypolicy",
|
|
2195
|
+
"destination_layer": "security",
|
|
2196
|
+
"predicate": "requires",
|
|
1844
2197
|
"cardinality": "many-to-many",
|
|
1845
2198
|
"strength": "medium",
|
|
1846
|
-
"required": false
|
|
2199
|
+
"required": false,
|
|
2200
|
+
"description": "Calls to the operation are decided by the security policy."
|
|
1847
2201
|
},
|
|
1848
|
-
"api.
|
|
1849
|
-
"id": "api.
|
|
1850
|
-
"source_spec_node_id": "api.
|
|
2202
|
+
"api.operation.satisfies.motivation.constraint": {
|
|
2203
|
+
"id": "api.operation.satisfies.motivation.constraint",
|
|
2204
|
+
"source_spec_node_id": "api.operation",
|
|
1851
2205
|
"source_layer": "api",
|
|
1852
|
-
"destination_spec_node_id": "
|
|
1853
|
-
"destination_layer": "
|
|
1854
|
-
"predicate": "
|
|
2206
|
+
"destination_spec_node_id": "motivation.constraint",
|
|
2207
|
+
"destination_layer": "motivation",
|
|
2208
|
+
"predicate": "satisfies",
|
|
1855
2209
|
"cardinality": "many-to-many",
|
|
1856
2210
|
"strength": "medium",
|
|
1857
|
-
"required": false
|
|
2211
|
+
"required": false,
|
|
2212
|
+
"description": "The operation meets the constraint, such as a response-time budget."
|
|
1858
2213
|
},
|
|
1859
|
-
"api.
|
|
1860
|
-
"id": "api.
|
|
1861
|
-
"source_spec_node_id": "api.
|
|
2214
|
+
"api.operation.satisfies.motivation.requirement": {
|
|
2215
|
+
"id": "api.operation.satisfies.motivation.requirement",
|
|
2216
|
+
"source_spec_node_id": "api.operation",
|
|
1862
2217
|
"source_layer": "api",
|
|
1863
|
-
"destination_spec_node_id": "
|
|
1864
|
-
"destination_layer": "
|
|
1865
|
-
"predicate": "
|
|
2218
|
+
"destination_spec_node_id": "motivation.requirement",
|
|
2219
|
+
"destination_layer": "motivation",
|
|
2220
|
+
"predicate": "satisfies",
|
|
1866
2221
|
"cardinality": "many-to-many",
|
|
1867
2222
|
"strength": "medium",
|
|
1868
|
-
"required": false
|
|
2223
|
+
"required": false,
|
|
2224
|
+
"description": "The operation meets the requirement."
|
|
1869
2225
|
},
|
|
1870
|
-
"api.
|
|
1871
|
-
"id": "api.
|
|
1872
|
-
"source_spec_node_id": "api.
|
|
2226
|
+
"api.operation.serves.application.applicationcomponent": {
|
|
2227
|
+
"id": "api.operation.serves.application.applicationcomponent",
|
|
2228
|
+
"source_spec_node_id": "api.operation",
|
|
1873
2229
|
"source_layer": "api",
|
|
1874
|
-
"destination_spec_node_id": "
|
|
1875
|
-
"destination_layer": "
|
|
1876
|
-
"predicate": "
|
|
2230
|
+
"destination_spec_node_id": "application.applicationcomponent",
|
|
2231
|
+
"destination_layer": "application",
|
|
2232
|
+
"predicate": "serves",
|
|
1877
2233
|
"cardinality": "many-to-many",
|
|
1878
2234
|
"strength": "medium",
|
|
1879
|
-
"required": false
|
|
2235
|
+
"required": false,
|
|
2236
|
+
"description": "An API operation serves an application component that is its client: the component calls the operation.",
|
|
2237
|
+
"evidence": [
|
|
2238
|
+
"An API client class or module (a generated SDK service, a backend-for-frontend adapter) whose methods call the operation's route; CBM HTTP_CALLS from the component's file."
|
|
2239
|
+
]
|
|
1880
2240
|
},
|
|
1881
|
-
"api.
|
|
1882
|
-
"id": "api.
|
|
1883
|
-
"source_spec_node_id": "api.
|
|
2241
|
+
"api.operation.serves.navigation.flowstep": {
|
|
2242
|
+
"id": "api.operation.serves.navigation.flowstep",
|
|
2243
|
+
"source_spec_node_id": "api.operation",
|
|
1884
2244
|
"source_layer": "api",
|
|
1885
|
-
"destination_spec_node_id": "
|
|
1886
|
-
"destination_layer": "
|
|
2245
|
+
"destination_spec_node_id": "navigation.flowstep",
|
|
2246
|
+
"destination_layer": "navigation",
|
|
1887
2247
|
"predicate": "serves",
|
|
1888
2248
|
"cardinality": "many-to-many",
|
|
1889
2249
|
"strength": "medium",
|
|
1890
|
-
"required": false
|
|
2250
|
+
"required": false,
|
|
2251
|
+
"description": "The flow step calls the API operation, such as a payment step submitting the order."
|
|
1891
2252
|
},
|
|
1892
|
-
"api.
|
|
1893
|
-
"id": "api.
|
|
1894
|
-
"source_spec_node_id": "api.
|
|
2253
|
+
"api.operation.serves.navigation.navigationguard": {
|
|
2254
|
+
"id": "api.operation.serves.navigation.navigationguard",
|
|
2255
|
+
"source_spec_node_id": "api.operation",
|
|
1895
2256
|
"source_layer": "api",
|
|
1896
|
-
"destination_spec_node_id": "
|
|
1897
|
-
"destination_layer": "
|
|
1898
|
-
"predicate": "
|
|
2257
|
+
"destination_spec_node_id": "navigation.navigationguard",
|
|
2258
|
+
"destination_layer": "navigation",
|
|
2259
|
+
"predicate": "serves",
|
|
1899
2260
|
"cardinality": "many-to-many",
|
|
1900
2261
|
"strength": "medium",
|
|
1901
|
-
"required": false
|
|
2262
|
+
"required": false,
|
|
2263
|
+
"description": "The guard calls the API operation to decide, such as fetching the user's entitlements."
|
|
1902
2264
|
},
|
|
1903
|
-
"api.
|
|
1904
|
-
"id": "api.
|
|
1905
|
-
"source_spec_node_id": "api.
|
|
2265
|
+
"api.operation.serves.navigation.route": {
|
|
2266
|
+
"id": "api.operation.serves.navigation.route",
|
|
2267
|
+
"source_spec_node_id": "api.operation",
|
|
1906
2268
|
"source_layer": "api",
|
|
1907
|
-
"destination_spec_node_id": "
|
|
1908
|
-
"destination_layer": "
|
|
1909
|
-
"predicate": "
|
|
2269
|
+
"destination_spec_node_id": "navigation.route",
|
|
2270
|
+
"destination_layer": "navigation",
|
|
2271
|
+
"predicate": "serves",
|
|
1910
2272
|
"cardinality": "many-to-many",
|
|
1911
2273
|
"strength": "medium",
|
|
1912
|
-
"required": false
|
|
2274
|
+
"required": false,
|
|
2275
|
+
"description": "The route calls the API operation to load its data, such as an order page fetching the order."
|
|
1913
2276
|
},
|
|
1914
|
-
"api.
|
|
1915
|
-
"id": "api.
|
|
1916
|
-
"source_spec_node_id": "api.
|
|
2277
|
+
"api.operation.supports.motivation.goal": {
|
|
2278
|
+
"id": "api.operation.supports.motivation.goal",
|
|
2279
|
+
"source_spec_node_id": "api.operation",
|
|
1917
2280
|
"source_layer": "api",
|
|
1918
|
-
"destination_spec_node_id": "
|
|
1919
|
-
"destination_layer": "
|
|
1920
|
-
"predicate": "
|
|
2281
|
+
"destination_spec_node_id": "motivation.goal",
|
|
2282
|
+
"destination_layer": "motivation",
|
|
2283
|
+
"predicate": "supports",
|
|
1921
2284
|
"cardinality": "many-to-many",
|
|
1922
2285
|
"strength": "medium",
|
|
1923
|
-
"required": false
|
|
2286
|
+
"required": false,
|
|
2287
|
+
"description": "The operation contributes to the goal."
|
|
1924
2288
|
},
|
|
1925
|
-
"api.
|
|
1926
|
-
"id": "api.
|
|
1927
|
-
"source_spec_node_id": "api.
|
|
2289
|
+
"api.operation.supports.motivation.outcome": {
|
|
2290
|
+
"id": "api.operation.supports.motivation.outcome",
|
|
2291
|
+
"source_spec_node_id": "api.operation",
|
|
1928
2292
|
"source_layer": "api",
|
|
1929
|
-
"destination_spec_node_id": "
|
|
1930
|
-
"destination_layer": "
|
|
1931
|
-
"predicate": "
|
|
2293
|
+
"destination_spec_node_id": "motivation.outcome",
|
|
2294
|
+
"destination_layer": "motivation",
|
|
2295
|
+
"predicate": "supports",
|
|
1932
2296
|
"cardinality": "many-to-many",
|
|
1933
2297
|
"strength": "medium",
|
|
1934
|
-
"required": false
|
|
2298
|
+
"required": false,
|
|
2299
|
+
"description": "The operation contributes to the outcome."
|
|
1935
2300
|
},
|
|
1936
|
-
"api.
|
|
1937
|
-
"id": "api.
|
|
1938
|
-
"source_spec_node_id": "api.
|
|
2301
|
+
"api.operation.triggers.application.applicationevent": {
|
|
2302
|
+
"id": "api.operation.triggers.application.applicationevent",
|
|
2303
|
+
"source_spec_node_id": "api.operation",
|
|
1939
2304
|
"source_layer": "api",
|
|
1940
|
-
"destination_spec_node_id": "
|
|
1941
|
-
"destination_layer": "
|
|
1942
|
-
"predicate": "
|
|
2305
|
+
"destination_spec_node_id": "application.applicationevent",
|
|
2306
|
+
"destination_layer": "application",
|
|
2307
|
+
"predicate": "triggers",
|
|
1943
2308
|
"cardinality": "many-to-many",
|
|
1944
2309
|
"strength": "medium",
|
|
1945
|
-
"required": false
|
|
2310
|
+
"required": false,
|
|
2311
|
+
"description": "A successful call raises the application event, such as OrderPlaced."
|
|
1946
2312
|
},
|
|
1947
|
-
"api.
|
|
1948
|
-
"id": "api.
|
|
1949
|
-
"source_spec_node_id": "api.
|
|
1950
|
-
"source_layer": "api",
|
|
1951
|
-
"destination_spec_node_id": "api.responses",
|
|
1952
|
-
"destination_layer": "api",
|
|
1953
|
-
"predicate": "composes",
|
|
1954
|
-
"cardinality": "many-to-many",
|
|
1955
|
-
"strength": "medium",
|
|
1956
|
-
"required": false
|
|
1957
|
-
},
|
|
1958
|
-
"api.openapidocument.composes.api.schema": {
|
|
1959
|
-
"id": "api.openapidocument.composes.api.schema",
|
|
1960
|
-
"source_spec_node_id": "api.openapidocument",
|
|
1961
|
-
"source_layer": "api",
|
|
1962
|
-
"destination_spec_node_id": "api.schema",
|
|
1963
|
-
"destination_layer": "api",
|
|
1964
|
-
"predicate": "composes",
|
|
1965
|
-
"cardinality": "many-to-many",
|
|
1966
|
-
"strength": "medium",
|
|
1967
|
-
"required": false
|
|
1968
|
-
},
|
|
1969
|
-
"api.openapidocument.depends-on.technology.technologyservice": {
|
|
1970
|
-
"id": "api.openapidocument.depends-on.technology.technologyservice",
|
|
1971
|
-
"source_spec_node_id": "api.openapidocument",
|
|
1972
|
-
"source_layer": "api",
|
|
1973
|
-
"destination_spec_node_id": "technology.technologyservice",
|
|
1974
|
-
"destination_layer": "technology",
|
|
1975
|
-
"predicate": "depends-on",
|
|
1976
|
-
"cardinality": "many-to-many",
|
|
1977
|
-
"strength": "medium",
|
|
1978
|
-
"required": false
|
|
1979
|
-
},
|
|
1980
|
-
"api.openapidocument.realizes.application.applicationservice": {
|
|
1981
|
-
"id": "api.openapidocument.realizes.application.applicationservice",
|
|
1982
|
-
"source_spec_node_id": "api.openapidocument",
|
|
1983
|
-
"source_layer": "api",
|
|
1984
|
-
"destination_spec_node_id": "application.applicationservice",
|
|
1985
|
-
"destination_layer": "application",
|
|
1986
|
-
"predicate": "realizes",
|
|
1987
|
-
"cardinality": "many-to-many",
|
|
1988
|
-
"strength": "medium",
|
|
1989
|
-
"required": false
|
|
1990
|
-
},
|
|
1991
|
-
"api.openapidocument.realizes.business.businessservice": {
|
|
1992
|
-
"id": "api.openapidocument.realizes.business.businessservice",
|
|
1993
|
-
"source_spec_node_id": "api.openapidocument",
|
|
1994
|
-
"source_layer": "api",
|
|
1995
|
-
"destination_spec_node_id": "business.businessservice",
|
|
1996
|
-
"destination_layer": "business",
|
|
1997
|
-
"predicate": "realizes",
|
|
1998
|
-
"cardinality": "many-to-many",
|
|
1999
|
-
"strength": "medium",
|
|
2000
|
-
"required": false
|
|
2001
|
-
},
|
|
2002
|
-
"api.openapidocument.references.api.externaldocumentation": {
|
|
2003
|
-
"id": "api.openapidocument.references.api.externaldocumentation",
|
|
2004
|
-
"source_spec_node_id": "api.openapidocument",
|
|
2005
|
-
"source_layer": "api",
|
|
2006
|
-
"destination_spec_node_id": "api.externaldocumentation",
|
|
2007
|
-
"destination_layer": "api",
|
|
2008
|
-
"predicate": "references",
|
|
2009
|
-
"cardinality": "many-to-many",
|
|
2010
|
-
"strength": "medium",
|
|
2011
|
-
"required": false
|
|
2012
|
-
},
|
|
2013
|
-
"api.openapidocument.requires.api.securityscheme": {
|
|
2014
|
-
"id": "api.openapidocument.requires.api.securityscheme",
|
|
2015
|
-
"source_spec_node_id": "api.openapidocument",
|
|
2016
|
-
"source_layer": "api",
|
|
2017
|
-
"destination_spec_node_id": "api.securityscheme",
|
|
2018
|
-
"destination_layer": "api",
|
|
2019
|
-
"predicate": "requires",
|
|
2020
|
-
"cardinality": "many-to-many",
|
|
2021
|
-
"strength": "medium",
|
|
2022
|
-
"required": false
|
|
2023
|
-
},
|
|
2024
|
-
"api.openapidocument.serves.application.applicationcomponent": {
|
|
2025
|
-
"id": "api.openapidocument.serves.application.applicationcomponent",
|
|
2026
|
-
"source_spec_node_id": "api.openapidocument",
|
|
2027
|
-
"source_layer": "api",
|
|
2028
|
-
"destination_spec_node_id": "application.applicationcomponent",
|
|
2029
|
-
"destination_layer": "application",
|
|
2030
|
-
"predicate": "serves",
|
|
2031
|
-
"cardinality": "many-to-many",
|
|
2032
|
-
"strength": "medium",
|
|
2033
|
-
"required": false
|
|
2034
|
-
},
|
|
2035
|
-
"api.openapidocument.serves.motivation.stakeholder": {
|
|
2036
|
-
"id": "api.openapidocument.serves.motivation.stakeholder",
|
|
2037
|
-
"source_spec_node_id": "api.openapidocument",
|
|
2038
|
-
"source_layer": "api",
|
|
2039
|
-
"destination_spec_node_id": "motivation.stakeholder",
|
|
2040
|
-
"destination_layer": "motivation",
|
|
2041
|
-
"predicate": "serves",
|
|
2042
|
-
"cardinality": "many-to-many",
|
|
2043
|
-
"strength": "medium",
|
|
2044
|
-
"required": false
|
|
2045
|
-
},
|
|
2046
|
-
"api.operation.aggregates.api.parameter": {
|
|
2047
|
-
"id": "api.operation.aggregates.api.parameter",
|
|
2048
|
-
"source_spec_node_id": "api.operation",
|
|
2049
|
-
"source_layer": "api",
|
|
2050
|
-
"destination_spec_node_id": "api.parameter",
|
|
2051
|
-
"destination_layer": "api",
|
|
2052
|
-
"predicate": "aggregates",
|
|
2053
|
-
"cardinality": "many-to-many",
|
|
2054
|
-
"strength": "medium",
|
|
2055
|
-
"required": false
|
|
2056
|
-
},
|
|
2057
|
-
"api.operation.aggregates.api.requestbody": {
|
|
2058
|
-
"id": "api.operation.aggregates.api.requestbody",
|
|
2059
|
-
"source_spec_node_id": "api.operation",
|
|
2060
|
-
"source_layer": "api",
|
|
2061
|
-
"destination_spec_node_id": "api.requestbody",
|
|
2062
|
-
"destination_layer": "api",
|
|
2063
|
-
"predicate": "aggregates",
|
|
2064
|
-
"cardinality": "many-to-many",
|
|
2065
|
-
"strength": "medium",
|
|
2066
|
-
"required": false
|
|
2067
|
-
},
|
|
2068
|
-
"api.operation.aggregates.api.server": {
|
|
2069
|
-
"id": "api.operation.aggregates.api.server",
|
|
2070
|
-
"source_spec_node_id": "api.operation",
|
|
2071
|
-
"source_layer": "api",
|
|
2072
|
-
"destination_spec_node_id": "api.server",
|
|
2073
|
-
"destination_layer": "api",
|
|
2074
|
-
"predicate": "aggregates",
|
|
2075
|
-
"cardinality": "many-to-many",
|
|
2076
|
-
"strength": "medium",
|
|
2077
|
-
"required": false
|
|
2078
|
-
},
|
|
2079
|
-
"api.operation.aggregates.api.tag": {
|
|
2080
|
-
"id": "api.operation.aggregates.api.tag",
|
|
2081
|
-
"source_spec_node_id": "api.operation",
|
|
2082
|
-
"source_layer": "api",
|
|
2083
|
-
"destination_spec_node_id": "api.tag",
|
|
2084
|
-
"destination_layer": "api",
|
|
2085
|
-
"predicate": "aggregates",
|
|
2086
|
-
"cardinality": "many-to-many",
|
|
2087
|
-
"strength": "medium",
|
|
2088
|
-
"required": false
|
|
2089
|
-
},
|
|
2090
|
-
"api.operation.composes.api.paths": {
|
|
2091
|
-
"id": "api.operation.composes.api.paths",
|
|
2092
|
-
"source_spec_node_id": "api.operation",
|
|
2093
|
-
"source_layer": "api",
|
|
2094
|
-
"destination_spec_node_id": "api.paths",
|
|
2095
|
-
"destination_layer": "api",
|
|
2096
|
-
"predicate": "composes",
|
|
2097
|
-
"cardinality": "many-to-many",
|
|
2098
|
-
"strength": "medium",
|
|
2099
|
-
"required": false
|
|
2100
|
-
},
|
|
2101
|
-
"api.operation.composes.api.responses": {
|
|
2102
|
-
"id": "api.operation.composes.api.responses",
|
|
2103
|
-
"source_spec_node_id": "api.operation",
|
|
2104
|
-
"source_layer": "api",
|
|
2105
|
-
"destination_spec_node_id": "api.responses",
|
|
2106
|
-
"destination_layer": "api",
|
|
2107
|
-
"predicate": "composes",
|
|
2108
|
-
"cardinality": "many-to-many",
|
|
2109
|
-
"strength": "medium",
|
|
2110
|
-
"required": false
|
|
2111
|
-
},
|
|
2112
|
-
"api.operation.composes.api.schema": {
|
|
2113
|
-
"id": "api.operation.composes.api.schema",
|
|
2114
|
-
"source_spec_node_id": "api.operation",
|
|
2115
|
-
"source_layer": "api",
|
|
2116
|
-
"destination_spec_node_id": "api.schema",
|
|
2117
|
-
"destination_layer": "api",
|
|
2118
|
-
"predicate": "composes",
|
|
2119
|
-
"cardinality": "many-to-many",
|
|
2120
|
-
"strength": "medium",
|
|
2121
|
-
"required": false
|
|
2122
|
-
},
|
|
2123
|
-
"api.operation.delivers.api.response": {
|
|
2124
|
-
"id": "api.operation.delivers.api.response",
|
|
2125
|
-
"source_spec_node_id": "api.operation",
|
|
2126
|
-
"source_layer": "api",
|
|
2127
|
-
"destination_spec_node_id": "api.response",
|
|
2128
|
-
"destination_layer": "api",
|
|
2129
|
-
"predicate": "delivers",
|
|
2130
|
-
"cardinality": "many-to-many",
|
|
2131
|
-
"strength": "medium",
|
|
2132
|
-
"required": false
|
|
2133
|
-
},
|
|
2134
|
-
"api.operation.realizes.application.applicationfunction": {
|
|
2135
|
-
"id": "api.operation.realizes.application.applicationfunction",
|
|
2136
|
-
"source_spec_node_id": "api.operation",
|
|
2137
|
-
"source_layer": "api",
|
|
2138
|
-
"destination_spec_node_id": "application.applicationfunction",
|
|
2139
|
-
"destination_layer": "application",
|
|
2140
|
-
"predicate": "realizes",
|
|
2141
|
-
"cardinality": "many-to-many",
|
|
2142
|
-
"strength": "medium",
|
|
2143
|
-
"required": false
|
|
2144
|
-
},
|
|
2145
|
-
"api.operation.realizes.business.businessprocess": {
|
|
2146
|
-
"id": "api.operation.realizes.business.businessprocess",
|
|
2147
|
-
"source_spec_node_id": "api.operation",
|
|
2148
|
-
"source_layer": "api",
|
|
2149
|
-
"destination_spec_node_id": "business.businessprocess",
|
|
2150
|
-
"destination_layer": "business",
|
|
2151
|
-
"predicate": "realizes",
|
|
2152
|
-
"cardinality": "many-to-many",
|
|
2153
|
-
"strength": "medium",
|
|
2154
|
-
"required": false
|
|
2155
|
-
},
|
|
2156
|
-
"api.operation.realizes.motivation.goal": {
|
|
2157
|
-
"id": "api.operation.realizes.motivation.goal",
|
|
2158
|
-
"source_spec_node_id": "api.operation",
|
|
2159
|
-
"source_layer": "api",
|
|
2160
|
-
"destination_spec_node_id": "motivation.goal",
|
|
2161
|
-
"destination_layer": "motivation",
|
|
2162
|
-
"predicate": "realizes",
|
|
2163
|
-
"cardinality": "many-to-many",
|
|
2164
|
-
"strength": "medium",
|
|
2165
|
-
"required": false
|
|
2166
|
-
},
|
|
2167
|
-
"api.operation.realizes.motivation.outcome": {
|
|
2168
|
-
"id": "api.operation.realizes.motivation.outcome",
|
|
2169
|
-
"source_spec_node_id": "api.operation",
|
|
2170
|
-
"source_layer": "api",
|
|
2171
|
-
"destination_spec_node_id": "motivation.outcome",
|
|
2172
|
-
"destination_layer": "motivation",
|
|
2173
|
-
"predicate": "realizes",
|
|
2174
|
-
"cardinality": "many-to-many",
|
|
2175
|
-
"strength": "medium",
|
|
2176
|
-
"required": false
|
|
2177
|
-
},
|
|
2178
|
-
"api.operation.references.application.applicationservice": {
|
|
2179
|
-
"id": "api.operation.references.application.applicationservice",
|
|
2180
|
-
"source_spec_node_id": "api.operation",
|
|
2181
|
-
"source_layer": "api",
|
|
2182
|
-
"destination_spec_node_id": "application.applicationservice",
|
|
2183
|
-
"destination_layer": "application",
|
|
2184
|
-
"predicate": "references",
|
|
2185
|
-
"cardinality": "many-to-many",
|
|
2186
|
-
"strength": "medium",
|
|
2187
|
-
"required": false
|
|
2188
|
-
},
|
|
2189
|
-
"api.operation.references.business.businessinterface": {
|
|
2190
|
-
"id": "api.operation.references.business.businessinterface",
|
|
2191
|
-
"source_spec_node_id": "api.operation",
|
|
2192
|
-
"source_layer": "api",
|
|
2193
|
-
"destination_spec_node_id": "business.businessinterface",
|
|
2194
|
-
"destination_layer": "business",
|
|
2195
|
-
"predicate": "references",
|
|
2196
|
-
"cardinality": "many-to-many",
|
|
2197
|
-
"strength": "medium",
|
|
2198
|
-
"required": false
|
|
2199
|
-
},
|
|
2200
|
-
"api.operation.references.business.businessservice": {
|
|
2201
|
-
"id": "api.operation.references.business.businessservice",
|
|
2202
|
-
"source_spec_node_id": "api.operation",
|
|
2203
|
-
"source_layer": "api",
|
|
2204
|
-
"destination_spec_node_id": "business.businessservice",
|
|
2205
|
-
"destination_layer": "business",
|
|
2206
|
-
"predicate": "references",
|
|
2207
|
-
"cardinality": "many-to-many",
|
|
2208
|
-
"strength": "medium",
|
|
2209
|
-
"required": false
|
|
2210
|
-
},
|
|
2211
|
-
"api.operation.references.api.externaldocumentation": {
|
|
2212
|
-
"id": "api.operation.references.api.externaldocumentation",
|
|
2213
|
-
"source_spec_node_id": "api.operation",
|
|
2214
|
-
"source_layer": "api",
|
|
2215
|
-
"destination_spec_node_id": "api.externaldocumentation",
|
|
2216
|
-
"destination_layer": "api",
|
|
2217
|
-
"predicate": "references",
|
|
2218
|
-
"cardinality": "many-to-many",
|
|
2219
|
-
"strength": "medium",
|
|
2220
|
-
"required": false
|
|
2221
|
-
},
|
|
2222
|
-
"api.operation.references.api.operation": {
|
|
2223
|
-
"id": "api.operation.references.api.operation",
|
|
2224
|
-
"source_spec_node_id": "api.operation",
|
|
2225
|
-
"source_layer": "api",
|
|
2226
|
-
"destination_spec_node_id": "api.operation",
|
|
2227
|
-
"destination_layer": "api",
|
|
2228
|
-
"predicate": "references",
|
|
2229
|
-
"cardinality": "many-to-many",
|
|
2230
|
-
"strength": "medium",
|
|
2231
|
-
"required": false
|
|
2232
|
-
},
|
|
2233
|
-
"api.operation.references.api.schema": {
|
|
2234
|
-
"id": "api.operation.references.api.schema",
|
|
2235
|
-
"source_spec_node_id": "api.operation",
|
|
2236
|
-
"source_layer": "api",
|
|
2237
|
-
"destination_spec_node_id": "api.schema",
|
|
2238
|
-
"destination_layer": "api",
|
|
2239
|
-
"predicate": "references",
|
|
2240
|
-
"cardinality": "many-to-many",
|
|
2241
|
-
"strength": "medium",
|
|
2242
|
-
"required": false
|
|
2243
|
-
},
|
|
2244
|
-
"api.operation.references.security.secureresource": {
|
|
2245
|
-
"id": "api.operation.references.security.secureresource",
|
|
2246
|
-
"source_spec_node_id": "api.operation",
|
|
2247
|
-
"source_layer": "api",
|
|
2248
|
-
"destination_spec_node_id": "security.secureresource",
|
|
2249
|
-
"destination_layer": "security",
|
|
2250
|
-
"predicate": "references",
|
|
2251
|
-
"cardinality": "many-to-many",
|
|
2252
|
-
"strength": "medium",
|
|
2253
|
-
"required": false
|
|
2254
|
-
},
|
|
2255
|
-
"api.operation.references.api.tag": {
|
|
2256
|
-
"id": "api.operation.references.api.tag",
|
|
2257
|
-
"source_spec_node_id": "api.operation",
|
|
2258
|
-
"source_layer": "api",
|
|
2259
|
-
"destination_spec_node_id": "api.tag",
|
|
2260
|
-
"destination_layer": "api",
|
|
2261
|
-
"predicate": "references",
|
|
2262
|
-
"cardinality": "many-to-many",
|
|
2263
|
-
"strength": "medium",
|
|
2264
|
-
"required": false
|
|
2265
|
-
},
|
|
2266
|
-
"api.operation.references.security.threat": {
|
|
2267
|
-
"id": "api.operation.references.security.threat",
|
|
2268
|
-
"source_spec_node_id": "api.operation",
|
|
2269
|
-
"source_layer": "api",
|
|
2270
|
-
"destination_spec_node_id": "security.threat",
|
|
2271
|
-
"destination_layer": "security",
|
|
2272
|
-
"predicate": "references",
|
|
2273
|
-
"cardinality": "many-to-many",
|
|
2274
|
-
"strength": "medium",
|
|
2275
|
-
"required": false
|
|
2276
|
-
},
|
|
2277
|
-
"api.operation.references.apm.traceconfiguration": {
|
|
2278
|
-
"id": "api.operation.references.apm.traceconfiguration",
|
|
2279
|
-
"source_spec_node_id": "api.operation",
|
|
2280
|
-
"source_layer": "api",
|
|
2281
|
-
"destination_spec_node_id": "apm.traceconfiguration",
|
|
2282
|
-
"destination_layer": "apm",
|
|
2283
|
-
"predicate": "references",
|
|
2284
|
-
"cardinality": "many-to-many",
|
|
2285
|
-
"strength": "medium",
|
|
2286
|
-
"required": false
|
|
2287
|
-
},
|
|
2288
|
-
"api.operation.requires.security.permission": {
|
|
2289
|
-
"id": "api.operation.requires.security.permission",
|
|
2290
|
-
"source_spec_node_id": "api.operation",
|
|
2291
|
-
"source_layer": "api",
|
|
2292
|
-
"destination_spec_node_id": "security.permission",
|
|
2293
|
-
"destination_layer": "security",
|
|
2294
|
-
"predicate": "requires",
|
|
2295
|
-
"cardinality": "many-to-many",
|
|
2296
|
-
"strength": "medium",
|
|
2297
|
-
"required": false
|
|
2298
|
-
},
|
|
2299
|
-
"api.operation.requires.security.securitypolicy": {
|
|
2300
|
-
"id": "api.operation.requires.security.securitypolicy",
|
|
2301
|
-
"source_spec_node_id": "api.operation",
|
|
2302
|
-
"source_layer": "api",
|
|
2303
|
-
"destination_spec_node_id": "security.securitypolicy",
|
|
2304
|
-
"destination_layer": "security",
|
|
2305
|
-
"predicate": "requires",
|
|
2306
|
-
"cardinality": "many-to-many",
|
|
2307
|
-
"strength": "medium",
|
|
2308
|
-
"required": false
|
|
2309
|
-
},
|
|
2310
|
-
"api.operation.satisfies.motivation.constraint": {
|
|
2311
|
-
"id": "api.operation.satisfies.motivation.constraint",
|
|
2312
|
-
"source_spec_node_id": "api.operation",
|
|
2313
|
-
"source_layer": "api",
|
|
2314
|
-
"destination_spec_node_id": "motivation.constraint",
|
|
2315
|
-
"destination_layer": "motivation",
|
|
2316
|
-
"predicate": "satisfies",
|
|
2317
|
-
"cardinality": "many-to-many",
|
|
2318
|
-
"strength": "medium",
|
|
2319
|
-
"required": false
|
|
2320
|
-
},
|
|
2321
|
-
"api.operation.satisfies.security.countermeasure": {
|
|
2322
|
-
"id": "api.operation.satisfies.security.countermeasure",
|
|
2323
|
-
"source_spec_node_id": "api.operation",
|
|
2324
|
-
"source_layer": "api",
|
|
2325
|
-
"destination_spec_node_id": "security.countermeasure",
|
|
2326
|
-
"destination_layer": "security",
|
|
2327
|
-
"predicate": "satisfies",
|
|
2328
|
-
"cardinality": "many-to-many",
|
|
2329
|
-
"strength": "medium",
|
|
2330
|
-
"required": false
|
|
2331
|
-
},
|
|
2332
|
-
"api.operation.satisfies.motivation.requirement": {
|
|
2333
|
-
"id": "api.operation.satisfies.motivation.requirement",
|
|
2334
|
-
"source_spec_node_id": "api.operation",
|
|
2335
|
-
"source_layer": "api",
|
|
2336
|
-
"destination_spec_node_id": "motivation.requirement",
|
|
2337
|
-
"destination_layer": "motivation",
|
|
2338
|
-
"predicate": "satisfies",
|
|
2339
|
-
"cardinality": "many-to-many",
|
|
2340
|
-
"strength": "medium",
|
|
2341
|
-
"required": false
|
|
2342
|
-
},
|
|
2343
|
-
"api.operation.serves.business.businessrole": {
|
|
2344
|
-
"id": "api.operation.serves.business.businessrole",
|
|
2345
|
-
"source_spec_node_id": "api.operation",
|
|
2346
|
-
"source_layer": "api",
|
|
2347
|
-
"destination_spec_node_id": "business.businessrole",
|
|
2348
|
-
"destination_layer": "business",
|
|
2349
|
-
"predicate": "serves",
|
|
2350
|
-
"cardinality": "many-to-many",
|
|
2351
|
-
"strength": "medium",
|
|
2352
|
-
"required": false
|
|
2353
|
-
},
|
|
2354
|
-
"api.operation.triggers.application.applicationevent": {
|
|
2355
|
-
"id": "api.operation.triggers.application.applicationevent",
|
|
2356
|
-
"source_spec_node_id": "api.operation",
|
|
2357
|
-
"source_layer": "api",
|
|
2358
|
-
"destination_spec_node_id": "application.applicationevent",
|
|
2359
|
-
"destination_layer": "application",
|
|
2360
|
-
"predicate": "triggers",
|
|
2361
|
-
"cardinality": "many-to-many",
|
|
2362
|
-
"strength": "medium",
|
|
2363
|
-
"required": false
|
|
2364
|
-
},
|
|
2365
|
-
"api.operation.triggers.business.businessprocess": {
|
|
2366
|
-
"id": "api.operation.triggers.business.businessprocess",
|
|
2367
|
-
"source_spec_node_id": "api.operation",
|
|
2368
|
-
"source_layer": "api",
|
|
2369
|
-
"destination_spec_node_id": "business.businessprocess",
|
|
2370
|
-
"destination_layer": "business",
|
|
2371
|
-
"predicate": "triggers",
|
|
2372
|
-
"cardinality": "many-to-many",
|
|
2373
|
-
"strength": "medium",
|
|
2374
|
-
"required": false
|
|
2375
|
-
},
|
|
2376
|
-
"api.operation.triggers.api.callback": {
|
|
2377
|
-
"id": "api.operation.triggers.api.callback",
|
|
2378
|
-
"source_spec_node_id": "api.operation",
|
|
2379
|
-
"source_layer": "api",
|
|
2380
|
-
"destination_spec_node_id": "api.callback",
|
|
2381
|
-
"destination_layer": "api",
|
|
2382
|
-
"predicate": "triggers",
|
|
2383
|
-
"cardinality": "many-to-many",
|
|
2384
|
-
"strength": "medium",
|
|
2385
|
-
"required": false
|
|
2386
|
-
},
|
|
2387
|
-
"api.operation.uses.application.applicationinterface": {
|
|
2388
|
-
"id": "api.operation.uses.application.applicationinterface",
|
|
2389
|
-
"source_spec_node_id": "api.operation",
|
|
2313
|
+
"api.operation.uses.application.applicationinterface": {
|
|
2314
|
+
"id": "api.operation.uses.application.applicationinterface",
|
|
2315
|
+
"source_spec_node_id": "api.operation",
|
|
2390
2316
|
"source_layer": "api",
|
|
2391
2317
|
"destination_spec_node_id": "application.applicationinterface",
|
|
2392
2318
|
"destination_layer": "application",
|
|
2393
2319
|
"predicate": "uses",
|
|
2394
2320
|
"cardinality": "many-to-many",
|
|
2395
2321
|
"strength": "medium",
|
|
2396
|
-
"required": false
|
|
2322
|
+
"required": false,
|
|
2323
|
+
"description": "The operation is offered through the application interface."
|
|
2397
2324
|
},
|
|
2398
2325
|
"api.operation.uses.api.securityscheme": {
|
|
2399
2326
|
"id": "api.operation.uses.api.securityscheme",
|
|
@@ -2401,87 +2328,35 @@
|
|
|
2401
2328
|
"source_layer": "api",
|
|
2402
2329
|
"destination_spec_node_id": "api.securityscheme",
|
|
2403
2330
|
"destination_layer": "api",
|
|
2404
|
-
"predicate": "uses",
|
|
2405
|
-
"cardinality": "many-to-many",
|
|
2406
|
-
"strength": "medium",
|
|
2407
|
-
"required": false
|
|
2408
|
-
},
|
|
2409
|
-
"api.operation.uses.technology.technologyservice": {
|
|
2410
|
-
"id": "api.operation.uses.technology.technologyservice",
|
|
2411
|
-
"source_spec_node_id": "api.operation",
|
|
2412
|
-
"source_layer": "api",
|
|
2413
|
-
"destination_spec_node_id": "technology.technologyservice",
|
|
2414
|
-
"destination_layer": "technology",
|
|
2415
|
-
"predicate": "uses",
|
|
2416
|
-
"cardinality": "many-to-many",
|
|
2417
|
-
"strength": "medium",
|
|
2418
|
-
"required": false
|
|
2419
|
-
},
|
|
2420
|
-
"api.parameter.references.api.example": {
|
|
2421
|
-
"id": "api.parameter.references.api.example",
|
|
2422
|
-
"source_spec_node_id": "api.parameter",
|
|
2423
|
-
"source_layer": "api",
|
|
2424
|
-
"destination_spec_node_id": "api.example",
|
|
2425
|
-
"destination_layer": "api",
|
|
2426
|
-
"predicate": "references",
|
|
2427
|
-
"cardinality": "many-to-many",
|
|
2428
|
-
"strength": "medium",
|
|
2429
|
-
"required": false
|
|
2430
|
-
},
|
|
2431
|
-
"api.parameter.references.api.operation": {
|
|
2432
|
-
"id": "api.parameter.references.api.operation",
|
|
2433
|
-
"source_spec_node_id": "api.parameter",
|
|
2434
|
-
"source_layer": "api",
|
|
2435
|
-
"destination_spec_node_id": "api.operation",
|
|
2436
|
-
"destination_layer": "api",
|
|
2437
|
-
"predicate": "references",
|
|
2438
|
-
"cardinality": "many-to-many",
|
|
2439
|
-
"strength": "medium",
|
|
2440
|
-
"required": false
|
|
2441
|
-
},
|
|
2442
|
-
"api.parameter.references.api.schema": {
|
|
2443
|
-
"id": "api.parameter.references.api.schema",
|
|
2444
|
-
"source_spec_node_id": "api.parameter",
|
|
2445
|
-
"source_layer": "api",
|
|
2446
|
-
"destination_spec_node_id": "api.schema",
|
|
2447
|
-
"destination_layer": "api",
|
|
2448
|
-
"predicate": "references",
|
|
2331
|
+
"predicate": "uses",
|
|
2449
2332
|
"cardinality": "many-to-many",
|
|
2450
2333
|
"strength": "medium",
|
|
2451
|
-
"required": false
|
|
2334
|
+
"required": false,
|
|
2335
|
+
"description": "The operation's security requirement uses the scheme."
|
|
2452
2336
|
},
|
|
2453
|
-
"api.parameter.references.api.
|
|
2454
|
-
"id": "api.parameter.references.api.
|
|
2337
|
+
"api.parameter.references.api.example": {
|
|
2338
|
+
"id": "api.parameter.references.api.example",
|
|
2455
2339
|
"source_spec_node_id": "api.parameter",
|
|
2456
2340
|
"source_layer": "api",
|
|
2457
|
-
"destination_spec_node_id": "api.
|
|
2341
|
+
"destination_spec_node_id": "api.example",
|
|
2458
2342
|
"destination_layer": "api",
|
|
2459
2343
|
"predicate": "references",
|
|
2460
2344
|
"cardinality": "many-to-many",
|
|
2461
2345
|
"strength": "medium",
|
|
2462
|
-
"required": false
|
|
2463
|
-
|
|
2464
|
-
"api.pathitem.aggregates.api.parameter": {
|
|
2465
|
-
"id": "api.pathitem.aggregates.api.parameter",
|
|
2466
|
-
"source_spec_node_id": "api.pathitem",
|
|
2467
|
-
"source_layer": "api",
|
|
2468
|
-
"destination_spec_node_id": "api.parameter",
|
|
2469
|
-
"destination_layer": "api",
|
|
2470
|
-
"predicate": "aggregates",
|
|
2471
|
-
"cardinality": "many-to-many",
|
|
2472
|
-
"strength": "medium",
|
|
2473
|
-
"required": false
|
|
2346
|
+
"required": false,
|
|
2347
|
+
"description": "The parameter's example, by $ref to a reusable example."
|
|
2474
2348
|
},
|
|
2475
|
-
"api.
|
|
2476
|
-
"id": "api.
|
|
2477
|
-
"source_spec_node_id": "api.
|
|
2349
|
+
"api.parameter.references.api.schema": {
|
|
2350
|
+
"id": "api.parameter.references.api.schema",
|
|
2351
|
+
"source_spec_node_id": "api.parameter",
|
|
2478
2352
|
"source_layer": "api",
|
|
2479
|
-
"destination_spec_node_id": "api.
|
|
2353
|
+
"destination_spec_node_id": "api.schema",
|
|
2480
2354
|
"destination_layer": "api",
|
|
2481
|
-
"predicate": "
|
|
2355
|
+
"predicate": "references",
|
|
2482
2356
|
"cardinality": "many-to-many",
|
|
2483
2357
|
"strength": "medium",
|
|
2484
|
-
"required": false
|
|
2358
|
+
"required": false,
|
|
2359
|
+
"description": "The parameter's value follows the schema, by $ref."
|
|
2485
2360
|
},
|
|
2486
2361
|
"api.pathitem.composes.api.operation": {
|
|
2487
2362
|
"id": "api.pathitem.composes.api.operation",
|
|
@@ -2492,40 +2367,32 @@
|
|
|
2492
2367
|
"predicate": "composes",
|
|
2493
2368
|
"cardinality": "many-to-many",
|
|
2494
2369
|
"strength": "medium",
|
|
2495
|
-
"required": false
|
|
2496
|
-
|
|
2497
|
-
"api.pathitem.depends-on.technology.technologyservice": {
|
|
2498
|
-
"id": "api.pathitem.depends-on.technology.technologyservice",
|
|
2499
|
-
"source_spec_node_id": "api.pathitem",
|
|
2500
|
-
"source_layer": "api",
|
|
2501
|
-
"destination_spec_node_id": "technology.technologyservice",
|
|
2502
|
-
"destination_layer": "technology",
|
|
2503
|
-
"predicate": "depends-on",
|
|
2504
|
-
"cardinality": "many-to-many",
|
|
2505
|
-
"strength": "medium",
|
|
2506
|
-
"required": false
|
|
2370
|
+
"required": false,
|
|
2371
|
+
"description": "The operation is one HTTP method on the path."
|
|
2507
2372
|
},
|
|
2508
|
-
"api.pathitem.
|
|
2509
|
-
"id": "api.pathitem.
|
|
2373
|
+
"api.pathitem.composes.api.parameter": {
|
|
2374
|
+
"id": "api.pathitem.composes.api.parameter",
|
|
2510
2375
|
"source_spec_node_id": "api.pathitem",
|
|
2511
2376
|
"source_layer": "api",
|
|
2512
|
-
"destination_spec_node_id": "
|
|
2513
|
-
"destination_layer": "
|
|
2514
|
-
"predicate": "
|
|
2377
|
+
"destination_spec_node_id": "api.parameter",
|
|
2378
|
+
"destination_layer": "api",
|
|
2379
|
+
"predicate": "composes",
|
|
2515
2380
|
"cardinality": "many-to-many",
|
|
2516
2381
|
"strength": "medium",
|
|
2517
|
-
"required": false
|
|
2382
|
+
"required": false,
|
|
2383
|
+
"description": "The parameter applies to every operation on the path."
|
|
2518
2384
|
},
|
|
2519
|
-
"api.pathitem.
|
|
2520
|
-
"id": "api.pathitem.
|
|
2385
|
+
"api.pathitem.composes.api.server": {
|
|
2386
|
+
"id": "api.pathitem.composes.api.server",
|
|
2521
2387
|
"source_spec_node_id": "api.pathitem",
|
|
2522
2388
|
"source_layer": "api",
|
|
2523
|
-
"destination_spec_node_id": "api.
|
|
2389
|
+
"destination_spec_node_id": "api.server",
|
|
2524
2390
|
"destination_layer": "api",
|
|
2525
|
-
"predicate": "
|
|
2391
|
+
"predicate": "composes",
|
|
2526
2392
|
"cardinality": "many-to-many",
|
|
2527
2393
|
"strength": "medium",
|
|
2528
|
-
"required": false
|
|
2394
|
+
"required": false,
|
|
2395
|
+
"description": "Operations on the path are called on the server instead of the document's."
|
|
2529
2396
|
},
|
|
2530
2397
|
"api.pathitem.references.api.pathitem": {
|
|
2531
2398
|
"id": "api.pathitem.references.api.pathitem",
|
|
@@ -2536,62 +2403,8 @@
|
|
|
2536
2403
|
"predicate": "references",
|
|
2537
2404
|
"cardinality": "many-to-many",
|
|
2538
2405
|
"strength": "medium",
|
|
2539
|
-
"required": false
|
|
2540
|
-
|
|
2541
|
-
"api.pathitem.requires.security.securitypolicy": {
|
|
2542
|
-
"id": "api.pathitem.requires.security.securitypolicy",
|
|
2543
|
-
"source_spec_node_id": "api.pathitem",
|
|
2544
|
-
"source_layer": "api",
|
|
2545
|
-
"destination_spec_node_id": "security.securitypolicy",
|
|
2546
|
-
"destination_layer": "security",
|
|
2547
|
-
"predicate": "requires",
|
|
2548
|
-
"cardinality": "many-to-many",
|
|
2549
|
-
"strength": "medium",
|
|
2550
|
-
"required": false
|
|
2551
|
-
},
|
|
2552
|
-
"api.pathitem.serves.application.applicationcomponent": {
|
|
2553
|
-
"id": "api.pathitem.serves.application.applicationcomponent",
|
|
2554
|
-
"source_spec_node_id": "api.pathitem",
|
|
2555
|
-
"source_layer": "api",
|
|
2556
|
-
"destination_spec_node_id": "application.applicationcomponent",
|
|
2557
|
-
"destination_layer": "application",
|
|
2558
|
-
"predicate": "serves",
|
|
2559
|
-
"cardinality": "many-to-many",
|
|
2560
|
-
"strength": "medium",
|
|
2561
|
-
"required": false
|
|
2562
|
-
},
|
|
2563
|
-
"api.paths.aggregates.api.pathitem": {
|
|
2564
|
-
"id": "api.paths.aggregates.api.pathitem",
|
|
2565
|
-
"source_spec_node_id": "api.paths",
|
|
2566
|
-
"source_layer": "api",
|
|
2567
|
-
"destination_spec_node_id": "api.pathitem",
|
|
2568
|
-
"destination_layer": "api",
|
|
2569
|
-
"predicate": "aggregates",
|
|
2570
|
-
"cardinality": "many-to-many",
|
|
2571
|
-
"strength": "medium",
|
|
2572
|
-
"required": false
|
|
2573
|
-
},
|
|
2574
|
-
"api.paths.aggregates.api.server": {
|
|
2575
|
-
"id": "api.paths.aggregates.api.server",
|
|
2576
|
-
"source_spec_node_id": "api.paths",
|
|
2577
|
-
"source_layer": "api",
|
|
2578
|
-
"destination_spec_node_id": "api.server",
|
|
2579
|
-
"destination_layer": "api",
|
|
2580
|
-
"predicate": "aggregates",
|
|
2581
|
-
"cardinality": "many-to-many",
|
|
2582
|
-
"strength": "medium",
|
|
2583
|
-
"required": false
|
|
2584
|
-
},
|
|
2585
|
-
"api.paths.associated-with.api.ratelimit": {
|
|
2586
|
-
"id": "api.paths.associated-with.api.ratelimit",
|
|
2587
|
-
"source_spec_node_id": "api.paths",
|
|
2588
|
-
"source_layer": "api",
|
|
2589
|
-
"destination_spec_node_id": "api.ratelimit",
|
|
2590
|
-
"destination_layer": "api",
|
|
2591
|
-
"predicate": "associated-with",
|
|
2592
|
-
"cardinality": "many-to-many",
|
|
2593
|
-
"strength": "medium",
|
|
2594
|
-
"required": false
|
|
2406
|
+
"required": false,
|
|
2407
|
+
"description": "The path item is defined by $ref to another path item."
|
|
2595
2408
|
},
|
|
2596
2409
|
"api.paths.composes.api.pathitem": {
|
|
2597
2410
|
"id": "api.paths.composes.api.pathitem",
|
|
@@ -2602,62 +2415,20 @@
|
|
|
2602
2415
|
"predicate": "composes",
|
|
2603
2416
|
"cardinality": "many-to-many",
|
|
2604
2417
|
"strength": "medium",
|
|
2605
|
-
"required": false
|
|
2606
|
-
|
|
2607
|
-
"api.paths.references.api.externaldocumentation": {
|
|
2608
|
-
"id": "api.paths.references.api.externaldocumentation",
|
|
2609
|
-
"source_spec_node_id": "api.paths",
|
|
2610
|
-
"source_layer": "api",
|
|
2611
|
-
"destination_spec_node_id": "api.externaldocumentation",
|
|
2612
|
-
"destination_layer": "api",
|
|
2613
|
-
"predicate": "references",
|
|
2614
|
-
"cardinality": "many-to-many",
|
|
2615
|
-
"strength": "medium",
|
|
2616
|
-
"required": false
|
|
2617
|
-
},
|
|
2618
|
-
"api.paths.references.api.tag": {
|
|
2619
|
-
"id": "api.paths.references.api.tag",
|
|
2620
|
-
"source_spec_node_id": "api.paths",
|
|
2621
|
-
"source_layer": "api",
|
|
2622
|
-
"destination_spec_node_id": "api.tag",
|
|
2623
|
-
"destination_layer": "api",
|
|
2624
|
-
"predicate": "references",
|
|
2625
|
-
"cardinality": "many-to-many",
|
|
2626
|
-
"strength": "medium",
|
|
2627
|
-
"required": false
|
|
2628
|
-
},
|
|
2629
|
-
"api.paths.serves.api.operation": {
|
|
2630
|
-
"id": "api.paths.serves.api.operation",
|
|
2631
|
-
"source_spec_node_id": "api.paths",
|
|
2632
|
-
"source_layer": "api",
|
|
2633
|
-
"destination_spec_node_id": "api.operation",
|
|
2634
|
-
"destination_layer": "api",
|
|
2635
|
-
"predicate": "serves",
|
|
2636
|
-
"cardinality": "many-to-many",
|
|
2637
|
-
"strength": "medium",
|
|
2638
|
-
"required": false
|
|
2418
|
+
"required": false,
|
|
2419
|
+
"description": "The path item is the entry for one path template."
|
|
2639
2420
|
},
|
|
2640
|
-
"api.ratelimit.
|
|
2641
|
-
"id": "api.ratelimit.
|
|
2421
|
+
"api.ratelimit.depends-on.technology.systemsoftware": {
|
|
2422
|
+
"id": "api.ratelimit.depends-on.technology.systemsoftware",
|
|
2642
2423
|
"source_spec_node_id": "api.ratelimit",
|
|
2643
2424
|
"source_layer": "api",
|
|
2644
|
-
"destination_spec_node_id": "
|
|
2645
|
-
"destination_layer": "
|
|
2646
|
-
"predicate": "
|
|
2647
|
-
"cardinality": "many-to-many",
|
|
2648
|
-
"strength": "medium",
|
|
2649
|
-
"required": false
|
|
2650
|
-
},
|
|
2651
|
-
"api.ratelimit.associated-with.api.securityscheme": {
|
|
2652
|
-
"id": "api.ratelimit.associated-with.api.securityscheme",
|
|
2653
|
-
"source_spec_node_id": "api.ratelimit",
|
|
2654
|
-
"source_layer": "api",
|
|
2655
|
-
"destination_spec_node_id": "api.securityscheme",
|
|
2656
|
-
"destination_layer": "api",
|
|
2657
|
-
"predicate": "associated-with",
|
|
2425
|
+
"destination_spec_node_id": "technology.systemsoftware",
|
|
2426
|
+
"destination_layer": "technology",
|
|
2427
|
+
"predicate": "depends-on",
|
|
2658
2428
|
"cardinality": "many-to-many",
|
|
2659
2429
|
"strength": "medium",
|
|
2660
|
-
"required": false
|
|
2430
|
+
"required": false,
|
|
2431
|
+
"description": "The rate limit is enforced by the system software, such as an API gateway."
|
|
2661
2432
|
},
|
|
2662
2433
|
"api.ratelimit.governs.api.operation": {
|
|
2663
2434
|
"id": "api.ratelimit.governs.api.operation",
|
|
@@ -2668,359 +2439,176 @@
|
|
|
2668
2439
|
"predicate": "governs",
|
|
2669
2440
|
"cardinality": "many-to-many",
|
|
2670
2441
|
"strength": "medium",
|
|
2671
|
-
"required": false
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
"
|
|
2676
|
-
"
|
|
2677
|
-
"destination_spec_node_id": "security.countermeasure",
|
|
2678
|
-
"destination_layer": "security",
|
|
2679
|
-
"predicate": "implements",
|
|
2680
|
-
"cardinality": "many-to-many",
|
|
2681
|
-
"strength": "medium",
|
|
2682
|
-
"required": false
|
|
2683
|
-
},
|
|
2684
|
-
"api.ratelimit.satisfies.motivation.constraint": {
|
|
2685
|
-
"id": "api.ratelimit.satisfies.motivation.constraint",
|
|
2686
|
-
"source_spec_node_id": "api.ratelimit",
|
|
2687
|
-
"source_layer": "api",
|
|
2688
|
-
"destination_spec_node_id": "motivation.constraint",
|
|
2689
|
-
"destination_layer": "motivation",
|
|
2690
|
-
"predicate": "satisfies",
|
|
2691
|
-
"cardinality": "many-to-many",
|
|
2692
|
-
"strength": "medium",
|
|
2693
|
-
"required": false
|
|
2694
|
-
},
|
|
2695
|
-
"api.ratelimit.serves.api.operation": {
|
|
2696
|
-
"id": "api.ratelimit.serves.api.operation",
|
|
2697
|
-
"source_spec_node_id": "api.ratelimit",
|
|
2698
|
-
"source_layer": "api",
|
|
2699
|
-
"destination_spec_node_id": "api.operation",
|
|
2700
|
-
"destination_layer": "api",
|
|
2701
|
-
"predicate": "serves",
|
|
2702
|
-
"cardinality": "many-to-many",
|
|
2703
|
-
"strength": "medium",
|
|
2704
|
-
"required": false
|
|
2705
|
-
},
|
|
2706
|
-
"api.ratelimit.serves.api.pathitem": {
|
|
2707
|
-
"id": "api.ratelimit.serves.api.pathitem",
|
|
2708
|
-
"source_spec_node_id": "api.ratelimit",
|
|
2709
|
-
"source_layer": "api",
|
|
2710
|
-
"destination_spec_node_id": "api.pathitem",
|
|
2711
|
-
"destination_layer": "api",
|
|
2712
|
-
"predicate": "serves",
|
|
2713
|
-
"cardinality": "many-to-many",
|
|
2714
|
-
"strength": "medium",
|
|
2715
|
-
"required": false
|
|
2716
|
-
},
|
|
2717
|
-
"api.ratelimit.specializes.api.ratelimit": {
|
|
2718
|
-
"id": "api.ratelimit.specializes.api.ratelimit",
|
|
2719
|
-
"source_spec_node_id": "api.ratelimit",
|
|
2720
|
-
"source_layer": "api",
|
|
2721
|
-
"destination_spec_node_id": "api.ratelimit",
|
|
2722
|
-
"destination_layer": "api",
|
|
2723
|
-
"predicate": "specializes",
|
|
2724
|
-
"cardinality": "many-to-many",
|
|
2725
|
-
"strength": "medium",
|
|
2726
|
-
"required": false
|
|
2727
|
-
},
|
|
2728
|
-
"api.ratelimit.triggers.api.response": {
|
|
2729
|
-
"id": "api.ratelimit.triggers.api.response",
|
|
2730
|
-
"source_spec_node_id": "api.ratelimit",
|
|
2731
|
-
"source_layer": "api",
|
|
2732
|
-
"destination_spec_node_id": "api.response",
|
|
2733
|
-
"destination_layer": "api",
|
|
2734
|
-
"predicate": "triggers",
|
|
2735
|
-
"cardinality": "many-to-many",
|
|
2736
|
-
"strength": "medium",
|
|
2737
|
-
"required": false
|
|
2738
|
-
},
|
|
2739
|
-
"api.ratelimit.uses.technology.systemsoftware": {
|
|
2740
|
-
"id": "api.ratelimit.uses.technology.systemsoftware",
|
|
2741
|
-
"source_spec_node_id": "api.ratelimit",
|
|
2742
|
-
"source_layer": "api",
|
|
2743
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
2744
|
-
"destination_layer": "technology",
|
|
2745
|
-
"predicate": "uses",
|
|
2746
|
-
"cardinality": "many-to-many",
|
|
2747
|
-
"strength": "medium",
|
|
2748
|
-
"required": false
|
|
2749
|
-
},
|
|
2750
|
-
"api.requestbody.aggregates.api.example": {
|
|
2751
|
-
"id": "api.requestbody.aggregates.api.example",
|
|
2752
|
-
"source_spec_node_id": "api.requestbody",
|
|
2753
|
-
"source_layer": "api",
|
|
2754
|
-
"destination_spec_node_id": "api.example",
|
|
2755
|
-
"destination_layer": "api",
|
|
2756
|
-
"predicate": "aggregates",
|
|
2757
|
-
"cardinality": "many-to-many",
|
|
2758
|
-
"strength": "medium",
|
|
2759
|
-
"required": false
|
|
2760
|
-
},
|
|
2761
|
-
"api.requestbody.aggregates.api.mediatype": {
|
|
2762
|
-
"id": "api.requestbody.aggregates.api.mediatype",
|
|
2763
|
-
"source_spec_node_id": "api.requestbody",
|
|
2764
|
-
"source_layer": "api",
|
|
2765
|
-
"destination_spec_node_id": "api.mediatype",
|
|
2766
|
-
"destination_layer": "api",
|
|
2767
|
-
"predicate": "aggregates",
|
|
2768
|
-
"cardinality": "many-to-many",
|
|
2769
|
-
"strength": "medium",
|
|
2770
|
-
"required": false
|
|
2771
|
-
},
|
|
2772
|
-
"api.requestbody.associated-with.api.encoding": {
|
|
2773
|
-
"id": "api.requestbody.associated-with.api.encoding",
|
|
2774
|
-
"source_spec_node_id": "api.requestbody",
|
|
2775
|
-
"source_layer": "api",
|
|
2776
|
-
"destination_spec_node_id": "api.encoding",
|
|
2777
|
-
"destination_layer": "api",
|
|
2778
|
-
"predicate": "associated-with",
|
|
2779
|
-
"cardinality": "many-to-many",
|
|
2780
|
-
"strength": "medium",
|
|
2781
|
-
"required": false
|
|
2782
|
-
},
|
|
2783
|
-
"api.requestbody.composes.api.mediatype": {
|
|
2784
|
-
"id": "api.requestbody.composes.api.mediatype",
|
|
2785
|
-
"source_spec_node_id": "api.requestbody",
|
|
2786
|
-
"source_layer": "api",
|
|
2787
|
-
"destination_spec_node_id": "api.mediatype",
|
|
2788
|
-
"destination_layer": "api",
|
|
2789
|
-
"predicate": "composes",
|
|
2790
|
-
"cardinality": "many-to-many",
|
|
2791
|
-
"strength": "medium",
|
|
2792
|
-
"required": false
|
|
2793
|
-
},
|
|
2794
|
-
"api.requestbody.maps-to.business.businessobject": {
|
|
2795
|
-
"id": "api.requestbody.maps-to.business.businessobject",
|
|
2796
|
-
"source_spec_node_id": "api.requestbody",
|
|
2797
|
-
"source_layer": "api",
|
|
2798
|
-
"destination_spec_node_id": "business.businessobject",
|
|
2799
|
-
"destination_layer": "business",
|
|
2800
|
-
"predicate": "maps-to",
|
|
2801
|
-
"cardinality": "many-to-many",
|
|
2802
|
-
"strength": "medium",
|
|
2803
|
-
"required": false
|
|
2804
|
-
},
|
|
2805
|
-
"api.requestbody.references.api.schema": {
|
|
2806
|
-
"id": "api.requestbody.references.api.schema",
|
|
2807
|
-
"source_spec_node_id": "api.requestbody",
|
|
2808
|
-
"source_layer": "api",
|
|
2809
|
-
"destination_spec_node_id": "api.schema",
|
|
2810
|
-
"destination_layer": "api",
|
|
2811
|
-
"predicate": "references",
|
|
2812
|
-
"cardinality": "many-to-many",
|
|
2813
|
-
"strength": "medium",
|
|
2814
|
-
"required": false
|
|
2815
|
-
},
|
|
2816
|
-
"api.requestbody.serves.api.operation": {
|
|
2817
|
-
"id": "api.requestbody.serves.api.operation",
|
|
2818
|
-
"source_spec_node_id": "api.requestbody",
|
|
2819
|
-
"source_layer": "api",
|
|
2820
|
-
"destination_spec_node_id": "api.operation",
|
|
2821
|
-
"destination_layer": "api",
|
|
2822
|
-
"predicate": "serves",
|
|
2823
|
-
"cardinality": "many-to-many",
|
|
2824
|
-
"strength": "medium",
|
|
2825
|
-
"required": false
|
|
2826
|
-
},
|
|
2827
|
-
"api.response.aggregates.api.header": {
|
|
2828
|
-
"id": "api.response.aggregates.api.header",
|
|
2829
|
-
"source_spec_node_id": "api.response",
|
|
2830
|
-
"source_layer": "api",
|
|
2831
|
-
"destination_spec_node_id": "api.header",
|
|
2832
|
-
"destination_layer": "api",
|
|
2833
|
-
"predicate": "aggregates",
|
|
2834
|
-
"cardinality": "many-to-many",
|
|
2835
|
-
"strength": "medium",
|
|
2836
|
-
"required": false
|
|
2837
|
-
},
|
|
2838
|
-
"api.response.aggregates.api.mediatype": {
|
|
2839
|
-
"id": "api.response.aggregates.api.mediatype",
|
|
2840
|
-
"source_spec_node_id": "api.response",
|
|
2841
|
-
"source_layer": "api",
|
|
2842
|
-
"destination_spec_node_id": "api.mediatype",
|
|
2843
|
-
"destination_layer": "api",
|
|
2844
|
-
"predicate": "aggregates",
|
|
2845
|
-
"cardinality": "many-to-many",
|
|
2846
|
-
"strength": "medium",
|
|
2847
|
-
"required": false
|
|
2848
|
-
},
|
|
2849
|
-
"api.response.aggregates.api.schema": {
|
|
2850
|
-
"id": "api.response.aggregates.api.schema",
|
|
2851
|
-
"source_spec_node_id": "api.response",
|
|
2852
|
-
"source_layer": "api",
|
|
2853
|
-
"destination_spec_node_id": "api.schema",
|
|
2854
|
-
"destination_layer": "api",
|
|
2855
|
-
"predicate": "aggregates",
|
|
2856
|
-
"cardinality": "many-to-many",
|
|
2857
|
-
"strength": "medium",
|
|
2858
|
-
"required": false
|
|
2859
|
-
},
|
|
2860
|
-
"api.response.composes.api.header": {
|
|
2861
|
-
"id": "api.response.composes.api.header",
|
|
2862
|
-
"source_spec_node_id": "api.response",
|
|
2863
|
-
"source_layer": "api",
|
|
2864
|
-
"destination_spec_node_id": "api.header",
|
|
2865
|
-
"destination_layer": "api",
|
|
2866
|
-
"predicate": "composes",
|
|
2867
|
-
"cardinality": "many-to-many",
|
|
2868
|
-
"strength": "medium",
|
|
2869
|
-
"required": false
|
|
2870
|
-
},
|
|
2871
|
-
"api.response.composes.api.link": {
|
|
2872
|
-
"id": "api.response.composes.api.link",
|
|
2873
|
-
"source_spec_node_id": "api.response",
|
|
2442
|
+
"required": false,
|
|
2443
|
+
"description": "The rate limit caps calls to the operation."
|
|
2444
|
+
},
|
|
2445
|
+
"api.ratelimit.governs.api.pathitem": {
|
|
2446
|
+
"id": "api.ratelimit.governs.api.pathitem",
|
|
2447
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2874
2448
|
"source_layer": "api",
|
|
2875
|
-
"destination_spec_node_id": "api.
|
|
2449
|
+
"destination_spec_node_id": "api.pathitem",
|
|
2876
2450
|
"destination_layer": "api",
|
|
2877
|
-
"predicate": "
|
|
2451
|
+
"predicate": "governs",
|
|
2878
2452
|
"cardinality": "many-to-many",
|
|
2879
2453
|
"strength": "medium",
|
|
2880
|
-
"required": false
|
|
2454
|
+
"required": false,
|
|
2455
|
+
"description": "The rate limit caps calls to every operation on the path."
|
|
2881
2456
|
},
|
|
2882
|
-
"api.
|
|
2883
|
-
"id": "api.
|
|
2884
|
-
"source_spec_node_id": "api.
|
|
2457
|
+
"api.ratelimit.governs.api.server": {
|
|
2458
|
+
"id": "api.ratelimit.governs.api.server",
|
|
2459
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2885
2460
|
"source_layer": "api",
|
|
2886
|
-
"destination_spec_node_id": "api.
|
|
2461
|
+
"destination_spec_node_id": "api.server",
|
|
2887
2462
|
"destination_layer": "api",
|
|
2888
|
-
"predicate": "
|
|
2463
|
+
"predicate": "governs",
|
|
2889
2464
|
"cardinality": "many-to-many",
|
|
2890
2465
|
"strength": "medium",
|
|
2891
|
-
"required": false
|
|
2466
|
+
"required": false,
|
|
2467
|
+
"description": "The rate limit caps all calls to the server."
|
|
2892
2468
|
},
|
|
2893
|
-
"api.
|
|
2894
|
-
"id": "api.
|
|
2895
|
-
"source_spec_node_id": "api.
|
|
2469
|
+
"api.ratelimit.realizes.security.countermeasure": {
|
|
2470
|
+
"id": "api.ratelimit.realizes.security.countermeasure",
|
|
2471
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2896
2472
|
"source_layer": "api",
|
|
2897
|
-
"destination_spec_node_id": "
|
|
2898
|
-
"destination_layer": "
|
|
2899
|
-
"predicate": "
|
|
2473
|
+
"destination_spec_node_id": "security.countermeasure",
|
|
2474
|
+
"destination_layer": "security",
|
|
2475
|
+
"predicate": "realizes",
|
|
2900
2476
|
"cardinality": "many-to-many",
|
|
2901
2477
|
"strength": "medium",
|
|
2902
|
-
"required": false
|
|
2478
|
+
"required": false,
|
|
2479
|
+
"description": "The rate limit implements the countermeasure, such as throttling against credential stuffing."
|
|
2903
2480
|
},
|
|
2904
|
-
"api.
|
|
2905
|
-
"id": "api.
|
|
2906
|
-
"source_spec_node_id": "api.
|
|
2481
|
+
"api.ratelimit.references.api.header": {
|
|
2482
|
+
"id": "api.ratelimit.references.api.header",
|
|
2483
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2907
2484
|
"source_layer": "api",
|
|
2908
|
-
"destination_spec_node_id": "api.
|
|
2485
|
+
"destination_spec_node_id": "api.header",
|
|
2909
2486
|
"destination_layer": "api",
|
|
2910
2487
|
"predicate": "references",
|
|
2911
2488
|
"cardinality": "many-to-many",
|
|
2912
2489
|
"strength": "medium",
|
|
2913
|
-
"required": false
|
|
2490
|
+
"required": false,
|
|
2491
|
+
"description": "The rate limit reports its state in the header, such as X-RateLimit-Remaining."
|
|
2914
2492
|
},
|
|
2915
|
-
"api.
|
|
2916
|
-
"id": "api.
|
|
2917
|
-
"source_spec_node_id": "api.
|
|
2493
|
+
"api.ratelimit.references.api.securityscheme": {
|
|
2494
|
+
"id": "api.ratelimit.references.api.securityscheme",
|
|
2495
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2918
2496
|
"source_layer": "api",
|
|
2919
|
-
"destination_spec_node_id": "api.
|
|
2497
|
+
"destination_spec_node_id": "api.securityscheme",
|
|
2920
2498
|
"destination_layer": "api",
|
|
2921
|
-
"predicate": "
|
|
2499
|
+
"predicate": "references",
|
|
2922
2500
|
"cardinality": "many-to-many",
|
|
2923
2501
|
"strength": "medium",
|
|
2924
|
-
"required": false
|
|
2502
|
+
"required": false,
|
|
2503
|
+
"description": "The rate limit counts requests by the scheme's credential, such as per API key."
|
|
2925
2504
|
},
|
|
2926
|
-
"api.
|
|
2927
|
-
"id": "api.
|
|
2928
|
-
"source_spec_node_id": "api.
|
|
2505
|
+
"api.ratelimit.satisfies.motivation.constraint": {
|
|
2506
|
+
"id": "api.ratelimit.satisfies.motivation.constraint",
|
|
2507
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2929
2508
|
"source_layer": "api",
|
|
2930
|
-
"destination_spec_node_id": "
|
|
2931
|
-
"destination_layer": "
|
|
2932
|
-
"predicate": "
|
|
2509
|
+
"destination_spec_node_id": "motivation.constraint",
|
|
2510
|
+
"destination_layer": "motivation",
|
|
2511
|
+
"predicate": "satisfies",
|
|
2933
2512
|
"cardinality": "many-to-many",
|
|
2934
2513
|
"strength": "medium",
|
|
2935
|
-
"required": false
|
|
2514
|
+
"required": false,
|
|
2515
|
+
"description": "The rate limit meets the constraint, such as a capacity budget."
|
|
2936
2516
|
},
|
|
2937
|
-
"api.
|
|
2938
|
-
"id": "api.
|
|
2939
|
-
"source_spec_node_id": "api.
|
|
2517
|
+
"api.ratelimit.specializes.api.ratelimit": {
|
|
2518
|
+
"id": "api.ratelimit.specializes.api.ratelimit",
|
|
2519
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2940
2520
|
"source_layer": "api",
|
|
2941
2521
|
"destination_spec_node_id": "api.ratelimit",
|
|
2942
2522
|
"destination_layer": "api",
|
|
2943
|
-
"predicate": "
|
|
2523
|
+
"predicate": "specializes",
|
|
2944
2524
|
"cardinality": "many-to-many",
|
|
2945
2525
|
"strength": "medium",
|
|
2946
|
-
"required": false
|
|
2526
|
+
"required": false,
|
|
2527
|
+
"description": "The rate limit is a stricter variant of the general one, such as a per-user limit within a per-IP limit."
|
|
2947
2528
|
},
|
|
2948
|
-
"api.
|
|
2949
|
-
"id": "api.
|
|
2950
|
-
"source_spec_node_id": "api.
|
|
2529
|
+
"api.ratelimit.triggers.api.response": {
|
|
2530
|
+
"id": "api.ratelimit.triggers.api.response",
|
|
2531
|
+
"source_spec_node_id": "api.ratelimit",
|
|
2951
2532
|
"source_layer": "api",
|
|
2952
2533
|
"destination_spec_node_id": "api.response",
|
|
2953
2534
|
"destination_layer": "api",
|
|
2954
|
-
"predicate": "
|
|
2535
|
+
"predicate": "triggers",
|
|
2955
2536
|
"cardinality": "many-to-many",
|
|
2956
2537
|
"strength": "medium",
|
|
2957
|
-
"required": false
|
|
2538
|
+
"required": false,
|
|
2539
|
+
"description": "Exceeding the limit returns the response, usually 429 Too Many Requests."
|
|
2958
2540
|
},
|
|
2959
|
-
"api.
|
|
2960
|
-
"id": "api.
|
|
2961
|
-
"source_spec_node_id": "api.
|
|
2541
|
+
"api.requestbody.composes.api.mediatype": {
|
|
2542
|
+
"id": "api.requestbody.composes.api.mediatype",
|
|
2543
|
+
"source_spec_node_id": "api.requestbody",
|
|
2962
2544
|
"source_layer": "api",
|
|
2963
|
-
"destination_spec_node_id": "api.
|
|
2545
|
+
"destination_spec_node_id": "api.mediatype",
|
|
2964
2546
|
"destination_layer": "api",
|
|
2965
|
-
"predicate": "
|
|
2547
|
+
"predicate": "composes",
|
|
2966
2548
|
"cardinality": "many-to-many",
|
|
2967
2549
|
"strength": "medium",
|
|
2968
|
-
"required": false
|
|
2550
|
+
"required": false,
|
|
2551
|
+
"description": "The media type is one content type the body may be sent in."
|
|
2969
2552
|
},
|
|
2970
|
-
"api.
|
|
2971
|
-
"id": "api.
|
|
2972
|
-
"source_spec_node_id": "api.
|
|
2553
|
+
"api.response.composes.api.header": {
|
|
2554
|
+
"id": "api.response.composes.api.header",
|
|
2555
|
+
"source_spec_node_id": "api.response",
|
|
2973
2556
|
"source_layer": "api",
|
|
2974
|
-
"destination_spec_node_id": "api.
|
|
2557
|
+
"destination_spec_node_id": "api.header",
|
|
2975
2558
|
"destination_layer": "api",
|
|
2976
|
-
"predicate": "
|
|
2559
|
+
"predicate": "composes",
|
|
2977
2560
|
"cardinality": "many-to-many",
|
|
2978
2561
|
"strength": "medium",
|
|
2979
|
-
"required": false
|
|
2562
|
+
"required": false,
|
|
2563
|
+
"description": "The header is returned with the response."
|
|
2980
2564
|
},
|
|
2981
|
-
"api.
|
|
2982
|
-
"id": "api.
|
|
2983
|
-
"source_spec_node_id": "api.
|
|
2565
|
+
"api.response.composes.api.link": {
|
|
2566
|
+
"id": "api.response.composes.api.link",
|
|
2567
|
+
"source_spec_node_id": "api.response",
|
|
2984
2568
|
"source_layer": "api",
|
|
2985
|
-
"destination_spec_node_id": "
|
|
2986
|
-
"destination_layer": "
|
|
2987
|
-
"predicate": "
|
|
2569
|
+
"destination_spec_node_id": "api.link",
|
|
2570
|
+
"destination_layer": "api",
|
|
2571
|
+
"predicate": "composes",
|
|
2988
2572
|
"cardinality": "many-to-many",
|
|
2989
2573
|
"strength": "medium",
|
|
2990
|
-
"required": false
|
|
2574
|
+
"required": false,
|
|
2575
|
+
"description": "The link describes a follow-up operation the response enables."
|
|
2991
2576
|
},
|
|
2992
|
-
"api.
|
|
2993
|
-
"id": "api.
|
|
2994
|
-
"source_spec_node_id": "api.
|
|
2577
|
+
"api.response.composes.api.mediatype": {
|
|
2578
|
+
"id": "api.response.composes.api.mediatype",
|
|
2579
|
+
"source_spec_node_id": "api.response",
|
|
2995
2580
|
"source_layer": "api",
|
|
2996
|
-
"destination_spec_node_id": "
|
|
2997
|
-
"destination_layer": "
|
|
2998
|
-
"predicate": "
|
|
2581
|
+
"destination_spec_node_id": "api.mediatype",
|
|
2582
|
+
"destination_layer": "api",
|
|
2583
|
+
"predicate": "composes",
|
|
2999
2584
|
"cardinality": "many-to-many",
|
|
3000
2585
|
"strength": "medium",
|
|
3001
|
-
"required": false
|
|
2586
|
+
"required": false,
|
|
2587
|
+
"description": "The media type is one content type the response may be returned in."
|
|
3002
2588
|
},
|
|
3003
|
-
"api.
|
|
3004
|
-
"id": "api.
|
|
3005
|
-
"source_spec_node_id": "api.
|
|
2589
|
+
"api.responses.composes.api.response": {
|
|
2590
|
+
"id": "api.responses.composes.api.response",
|
|
2591
|
+
"source_spec_node_id": "api.responses",
|
|
3006
2592
|
"source_layer": "api",
|
|
3007
|
-
"destination_spec_node_id": "
|
|
3008
|
-
"destination_layer": "
|
|
3009
|
-
"predicate": "
|
|
2593
|
+
"destination_spec_node_id": "api.response",
|
|
2594
|
+
"destination_layer": "api",
|
|
2595
|
+
"predicate": "composes",
|
|
3010
2596
|
"cardinality": "many-to-many",
|
|
3011
2597
|
"strength": "medium",
|
|
3012
|
-
"required": false
|
|
2598
|
+
"required": false,
|
|
2599
|
+
"description": "The response is the outcome for one status code."
|
|
3013
2600
|
},
|
|
3014
|
-
"api.schema.references.api.
|
|
3015
|
-
"id": "api.schema.references.api.
|
|
2601
|
+
"api.schema.references.api.externaldocumentation": {
|
|
2602
|
+
"id": "api.schema.references.api.externaldocumentation",
|
|
3016
2603
|
"source_spec_node_id": "api.schema",
|
|
3017
2604
|
"source_layer": "api",
|
|
3018
|
-
"destination_spec_node_id": "api.
|
|
2605
|
+
"destination_spec_node_id": "api.externaldocumentation",
|
|
3019
2606
|
"destination_layer": "api",
|
|
3020
2607
|
"predicate": "references",
|
|
3021
2608
|
"cardinality": "many-to-many",
|
|
3022
2609
|
"strength": "medium",
|
|
3023
|
-
"required": false
|
|
2610
|
+
"required": false,
|
|
2611
|
+
"description": "The schema's externalDocs."
|
|
3024
2612
|
},
|
|
3025
2613
|
"api.schema.references.api.schema": {
|
|
3026
2614
|
"id": "api.schema.references.api.schema",
|
|
@@ -3031,18 +2619,8 @@
|
|
|
3031
2619
|
"predicate": "references",
|
|
3032
2620
|
"cardinality": "many-to-many",
|
|
3033
2621
|
"strength": "medium",
|
|
3034
|
-
"required": false
|
|
3035
|
-
|
|
3036
|
-
"api.schema.references.api.tag": {
|
|
3037
|
-
"id": "api.schema.references.api.tag",
|
|
3038
|
-
"source_spec_node_id": "api.schema",
|
|
3039
|
-
"source_layer": "api",
|
|
3040
|
-
"destination_spec_node_id": "api.tag",
|
|
3041
|
-
"destination_layer": "api",
|
|
3042
|
-
"predicate": "references",
|
|
3043
|
-
"cardinality": "many-to-many",
|
|
3044
|
-
"strength": "medium",
|
|
3045
|
-
"required": false
|
|
2622
|
+
"required": false,
|
|
2623
|
+
"description": "The schema refers to the other schema by $ref, such as a property typed as another schema."
|
|
3046
2624
|
},
|
|
3047
2625
|
"api.schema.specializes.api.schema": {
|
|
3048
2626
|
"id": "api.schema.specializes.api.schema",
|
|
@@ -3053,10 +2631,11 @@
|
|
|
3053
2631
|
"predicate": "specializes",
|
|
3054
2632
|
"cardinality": "many-to-many",
|
|
3055
2633
|
"strength": "medium",
|
|
3056
|
-
"required": false
|
|
2634
|
+
"required": false,
|
|
2635
|
+
"description": "The schema extends the other one through allOf."
|
|
3057
2636
|
},
|
|
3058
|
-
"api.securityscheme.composes.oauthflows": {
|
|
3059
|
-
"id": "api.securityscheme.composes.oauthflows",
|
|
2637
|
+
"api.securityscheme.composes.api.oauthflows": {
|
|
2638
|
+
"id": "api.securityscheme.composes.api.oauthflows",
|
|
3060
2639
|
"source_spec_node_id": "api.securityscheme",
|
|
3061
2640
|
"source_layer": "api",
|
|
3062
2641
|
"destination_spec_node_id": "api.oauthflows",
|
|
@@ -3064,84 +2643,32 @@
|
|
|
3064
2643
|
"predicate": "composes",
|
|
3065
2644
|
"cardinality": "one-to-one",
|
|
3066
2645
|
"strength": "high",
|
|
3067
|
-
"required": false
|
|
2646
|
+
"required": false,
|
|
2647
|
+
"description": "The OAuth flows belong to the oauth2 scheme."
|
|
3068
2648
|
},
|
|
3069
|
-
"api.securityscheme.
|
|
3070
|
-
"id": "api.securityscheme.
|
|
2649
|
+
"api.securityscheme.depends-on.technology.systemsoftware": {
|
|
2650
|
+
"id": "api.securityscheme.depends-on.technology.systemsoftware",
|
|
3071
2651
|
"source_spec_node_id": "api.securityscheme",
|
|
3072
2652
|
"source_layer": "api",
|
|
3073
|
-
"destination_spec_node_id": "
|
|
3074
|
-
"destination_layer": "
|
|
3075
|
-
"predicate": "
|
|
2653
|
+
"destination_spec_node_id": "technology.systemsoftware",
|
|
2654
|
+
"destination_layer": "technology",
|
|
2655
|
+
"predicate": "depends-on",
|
|
3076
2656
|
"cardinality": "many-to-many",
|
|
3077
2657
|
"strength": "medium",
|
|
3078
|
-
"required": false
|
|
2658
|
+
"required": false,
|
|
2659
|
+
"description": "The security scheme relies on the system software, such as an identity provider."
|
|
3079
2660
|
},
|
|
3080
|
-
"api.securityscheme.
|
|
3081
|
-
"id": "api.securityscheme.
|
|
2661
|
+
"api.securityscheme.realizes.security.securitypolicy": {
|
|
2662
|
+
"id": "api.securityscheme.realizes.security.securitypolicy",
|
|
3082
2663
|
"source_spec_node_id": "api.securityscheme",
|
|
3083
2664
|
"source_layer": "api",
|
|
3084
|
-
"destination_spec_node_id": "security.
|
|
2665
|
+
"destination_spec_node_id": "security.securitypolicy",
|
|
3085
2666
|
"destination_layer": "security",
|
|
3086
|
-
"predicate": "
|
|
3087
|
-
"cardinality": "many-to-many",
|
|
3088
|
-
"strength": "medium",
|
|
3089
|
-
"required": false
|
|
3090
|
-
},
|
|
3091
|
-
"api.securityscheme.maps-to.data-store.collection": {
|
|
3092
|
-
"id": "api.securityscheme.maps-to.data-store.collection",
|
|
3093
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3094
|
-
"source_layer": "api",
|
|
3095
|
-
"destination_spec_node_id": "data-store.collection",
|
|
3096
|
-
"destination_layer": "data-store",
|
|
3097
|
-
"predicate": "maps-to",
|
|
3098
|
-
"cardinality": "many-to-many",
|
|
3099
|
-
"strength": "medium",
|
|
3100
|
-
"required": false
|
|
3101
|
-
},
|
|
3102
|
-
"api.securityscheme.references.application.applicationcomponent": {
|
|
3103
|
-
"id": "api.securityscheme.references.application.applicationcomponent",
|
|
3104
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3105
|
-
"source_layer": "api",
|
|
3106
|
-
"destination_spec_node_id": "application.applicationcomponent",
|
|
3107
|
-
"destination_layer": "application",
|
|
3108
|
-
"predicate": "references",
|
|
3109
|
-
"cardinality": "many-to-many",
|
|
3110
|
-
"strength": "medium",
|
|
3111
|
-
"required": false
|
|
3112
|
-
},
|
|
3113
|
-
"api.securityscheme.references.application.applicationservice": {
|
|
3114
|
-
"id": "api.securityscheme.references.application.applicationservice",
|
|
3115
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3116
|
-
"source_layer": "api",
|
|
3117
|
-
"destination_spec_node_id": "application.applicationservice",
|
|
3118
|
-
"destination_layer": "application",
|
|
3119
|
-
"predicate": "references",
|
|
3120
|
-
"cardinality": "many-to-many",
|
|
3121
|
-
"strength": "medium",
|
|
3122
|
-
"required": false
|
|
3123
|
-
},
|
|
3124
|
-
"api.securityscheme.references.business.businessinterface": {
|
|
3125
|
-
"id": "api.securityscheme.references.business.businessinterface",
|
|
3126
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3127
|
-
"source_layer": "api",
|
|
3128
|
-
"destination_spec_node_id": "business.businessinterface",
|
|
3129
|
-
"destination_layer": "business",
|
|
3130
|
-
"predicate": "references",
|
|
3131
|
-
"cardinality": "many-to-many",
|
|
3132
|
-
"strength": "medium",
|
|
3133
|
-
"required": false
|
|
3134
|
-
},
|
|
3135
|
-
"api.securityscheme.references.business.businessservice": {
|
|
3136
|
-
"id": "api.securityscheme.references.business.businessservice",
|
|
3137
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3138
|
-
"source_layer": "api",
|
|
3139
|
-
"destination_spec_node_id": "business.businessservice",
|
|
3140
|
-
"destination_layer": "business",
|
|
3141
|
-
"predicate": "references",
|
|
2667
|
+
"predicate": "realizes",
|
|
3142
2668
|
"cardinality": "many-to-many",
|
|
3143
2669
|
"strength": "medium",
|
|
3144
|
-
"required": false
|
|
2670
|
+
"required": false,
|
|
2671
|
+
"description": "The scheme applies the authentication part of the security policy."
|
|
3145
2672
|
},
|
|
3146
2673
|
"api.securityscheme.references.security.secureresource": {
|
|
3147
2674
|
"id": "api.securityscheme.references.security.secureresource",
|
|
@@ -3152,7 +2679,8 @@
|
|
|
3152
2679
|
"predicate": "references",
|
|
3153
2680
|
"cardinality": "many-to-many",
|
|
3154
2681
|
"strength": "medium",
|
|
3155
|
-
"required": false
|
|
2682
|
+
"required": false,
|
|
2683
|
+
"description": "The scheme protects access to the resource."
|
|
3156
2684
|
},
|
|
3157
2685
|
"api.securityscheme.requires.security.permission": {
|
|
3158
2686
|
"id": "api.securityscheme.requires.security.permission",
|
|
@@ -3163,7 +2691,8 @@
|
|
|
3163
2691
|
"predicate": "requires",
|
|
3164
2692
|
"cardinality": "many-to-many",
|
|
3165
2693
|
"strength": "medium",
|
|
3166
|
-
"required": false
|
|
2694
|
+
"required": false,
|
|
2695
|
+
"description": "The scheme's scopes correspond to the permission."
|
|
3167
2696
|
},
|
|
3168
2697
|
"api.securityscheme.satisfies.motivation.principle": {
|
|
3169
2698
|
"id": "api.securityscheme.satisfies.motivation.principle",
|
|
@@ -3174,7 +2703,8 @@
|
|
|
3174
2703
|
"predicate": "satisfies",
|
|
3175
2704
|
"cardinality": "many-to-many",
|
|
3176
2705
|
"strength": "medium",
|
|
3177
|
-
"required": false
|
|
2706
|
+
"required": false,
|
|
2707
|
+
"description": "The scheme applies the principle, such as zero trust."
|
|
3178
2708
|
},
|
|
3179
2709
|
"api.securityscheme.satisfies.motivation.requirement": {
|
|
3180
2710
|
"id": "api.securityscheme.satisfies.motivation.requirement",
|
|
@@ -3185,62 +2715,20 @@
|
|
|
3185
2715
|
"predicate": "satisfies",
|
|
3186
2716
|
"cardinality": "many-to-many",
|
|
3187
2717
|
"strength": "medium",
|
|
3188
|
-
"required": false
|
|
3189
|
-
|
|
3190
|
-
"api.securityscheme.serves.business.businessrole": {
|
|
3191
|
-
"id": "api.securityscheme.serves.business.businessrole",
|
|
3192
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3193
|
-
"source_layer": "api",
|
|
3194
|
-
"destination_spec_node_id": "business.businessrole",
|
|
3195
|
-
"destination_layer": "business",
|
|
3196
|
-
"predicate": "serves",
|
|
3197
|
-
"cardinality": "many-to-many",
|
|
3198
|
-
"strength": "medium",
|
|
3199
|
-
"required": false
|
|
3200
|
-
},
|
|
3201
|
-
"api.securityscheme.serves.api.operation": {
|
|
3202
|
-
"id": "api.securityscheme.serves.api.operation",
|
|
3203
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3204
|
-
"source_layer": "api",
|
|
3205
|
-
"destination_spec_node_id": "api.operation",
|
|
3206
|
-
"destination_layer": "api",
|
|
3207
|
-
"predicate": "serves",
|
|
3208
|
-
"cardinality": "many-to-many",
|
|
3209
|
-
"strength": "medium",
|
|
3210
|
-
"required": false
|
|
3211
|
-
},
|
|
3212
|
-
"api.securityscheme.uses.technology.systemsoftware": {
|
|
3213
|
-
"id": "api.securityscheme.uses.technology.systemsoftware",
|
|
3214
|
-
"source_spec_node_id": "api.securityscheme",
|
|
3215
|
-
"source_layer": "api",
|
|
3216
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
3217
|
-
"destination_layer": "technology",
|
|
3218
|
-
"predicate": "uses",
|
|
3219
|
-
"cardinality": "many-to-many",
|
|
3220
|
-
"strength": "medium",
|
|
3221
|
-
"required": false
|
|
2718
|
+
"required": false,
|
|
2719
|
+
"description": "The scheme meets the requirement, such as 'all API calls authenticated'."
|
|
3222
2720
|
},
|
|
3223
|
-
"api.server.
|
|
3224
|
-
"id": "api.server.
|
|
2721
|
+
"api.server.composes.api.servervariable": {
|
|
2722
|
+
"id": "api.server.composes.api.servervariable",
|
|
3225
2723
|
"source_spec_node_id": "api.server",
|
|
3226
2724
|
"source_layer": "api",
|
|
3227
2725
|
"destination_spec_node_id": "api.servervariable",
|
|
3228
2726
|
"destination_layer": "api",
|
|
3229
|
-
"predicate": "
|
|
3230
|
-
"cardinality": "many-to-many",
|
|
3231
|
-
"strength": "medium",
|
|
3232
|
-
"required": false
|
|
3233
|
-
},
|
|
3234
|
-
"api.server.associated-with.api.ratelimit": {
|
|
3235
|
-
"id": "api.server.associated-with.api.ratelimit",
|
|
3236
|
-
"source_spec_node_id": "api.server",
|
|
3237
|
-
"source_layer": "api",
|
|
3238
|
-
"destination_spec_node_id": "api.ratelimit",
|
|
3239
|
-
"destination_layer": "api",
|
|
3240
|
-
"predicate": "associated-with",
|
|
2727
|
+
"predicate": "composes",
|
|
3241
2728
|
"cardinality": "many-to-many",
|
|
3242
2729
|
"strength": "medium",
|
|
3243
|
-
"required": false
|
|
2730
|
+
"required": false,
|
|
2731
|
+
"description": "The variable fills one placeholder in the server URL."
|
|
3244
2732
|
},
|
|
3245
2733
|
"api.server.depends-on.technology.node": {
|
|
3246
2734
|
"id": "api.server.depends-on.technology.node",
|
|
@@ -3251,18 +2739,20 @@
|
|
|
3251
2739
|
"predicate": "depends-on",
|
|
3252
2740
|
"cardinality": "many-to-many",
|
|
3253
2741
|
"strength": "medium",
|
|
3254
|
-
"required": false
|
|
2742
|
+
"required": false,
|
|
2743
|
+
"description": "The server URL is hosted on the node."
|
|
3255
2744
|
},
|
|
3256
|
-
"api.server.
|
|
3257
|
-
"id": "api.server.
|
|
2745
|
+
"api.server.depends-on.technology.systemsoftware": {
|
|
2746
|
+
"id": "api.server.depends-on.technology.systemsoftware",
|
|
3258
2747
|
"source_spec_node_id": "api.server",
|
|
3259
2748
|
"source_layer": "api",
|
|
3260
|
-
"destination_spec_node_id": "
|
|
3261
|
-
"destination_layer": "
|
|
3262
|
-
"predicate": "
|
|
2749
|
+
"destination_spec_node_id": "technology.systemsoftware",
|
|
2750
|
+
"destination_layer": "technology",
|
|
2751
|
+
"predicate": "depends-on",
|
|
3263
2752
|
"cardinality": "many-to-many",
|
|
3264
2753
|
"strength": "medium",
|
|
3265
|
-
"required": false
|
|
2754
|
+
"required": false,
|
|
2755
|
+
"description": "The API server runs on the system software, such as a web server or gateway."
|
|
3266
2756
|
},
|
|
3267
2757
|
"api.server.satisfies.security.securitypolicy": {
|
|
3268
2758
|
"id": "api.server.satisfies.security.securitypolicy",
|
|
@@ -3273,117 +2763,8 @@
|
|
|
3273
2763
|
"predicate": "satisfies",
|
|
3274
2764
|
"cardinality": "many-to-many",
|
|
3275
2765
|
"strength": "medium",
|
|
3276
|
-
"required": false
|
|
3277
|
-
|
|
3278
|
-
"api.server.serves.application.applicationcomponent": {
|
|
3279
|
-
"id": "api.server.serves.application.applicationcomponent",
|
|
3280
|
-
"source_spec_node_id": "api.server",
|
|
3281
|
-
"source_layer": "api",
|
|
3282
|
-
"destination_spec_node_id": "application.applicationcomponent",
|
|
3283
|
-
"destination_layer": "application",
|
|
3284
|
-
"predicate": "serves",
|
|
3285
|
-
"cardinality": "many-to-many",
|
|
3286
|
-
"strength": "medium",
|
|
3287
|
-
"required": false
|
|
3288
|
-
},
|
|
3289
|
-
"api.server.serves.api.pathitem": {
|
|
3290
|
-
"id": "api.server.serves.api.pathitem",
|
|
3291
|
-
"source_spec_node_id": "api.server",
|
|
3292
|
-
"source_layer": "api",
|
|
3293
|
-
"destination_spec_node_id": "api.pathitem",
|
|
3294
|
-
"destination_layer": "api",
|
|
3295
|
-
"predicate": "serves",
|
|
3296
|
-
"cardinality": "many-to-many",
|
|
3297
|
-
"strength": "medium",
|
|
3298
|
-
"required": false
|
|
3299
|
-
},
|
|
3300
|
-
"api.server.uses.technology.systemsoftware": {
|
|
3301
|
-
"id": "api.server.uses.technology.systemsoftware",
|
|
3302
|
-
"source_spec_node_id": "api.server",
|
|
3303
|
-
"source_layer": "api",
|
|
3304
|
-
"destination_spec_node_id": "technology.systemsoftware",
|
|
3305
|
-
"destination_layer": "technology",
|
|
3306
|
-
"predicate": "uses",
|
|
3307
|
-
"cardinality": "many-to-many",
|
|
3308
|
-
"strength": "medium",
|
|
3309
|
-
"required": false
|
|
3310
|
-
},
|
|
3311
|
-
"api.servervariable.associated-with.api.parameter": {
|
|
3312
|
-
"id": "api.servervariable.associated-with.api.parameter",
|
|
3313
|
-
"source_spec_node_id": "api.servervariable",
|
|
3314
|
-
"source_layer": "api",
|
|
3315
|
-
"destination_spec_node_id": "api.parameter",
|
|
3316
|
-
"destination_layer": "api",
|
|
3317
|
-
"predicate": "associated-with",
|
|
3318
|
-
"cardinality": "many-to-many",
|
|
3319
|
-
"strength": "medium",
|
|
3320
|
-
"required": false
|
|
3321
|
-
},
|
|
3322
|
-
"api.servervariable.governs.api.server": {
|
|
3323
|
-
"id": "api.servervariable.governs.api.server",
|
|
3324
|
-
"source_spec_node_id": "api.servervariable",
|
|
3325
|
-
"source_layer": "api",
|
|
3326
|
-
"destination_spec_node_id": "api.server",
|
|
3327
|
-
"destination_layer": "api",
|
|
3328
|
-
"predicate": "governs",
|
|
3329
|
-
"cardinality": "many-to-many",
|
|
3330
|
-
"strength": "medium",
|
|
3331
|
-
"required": false
|
|
3332
|
-
},
|
|
3333
|
-
"api.servervariable.references.api.example": {
|
|
3334
|
-
"id": "api.servervariable.references.api.example",
|
|
3335
|
-
"source_spec_node_id": "api.servervariable",
|
|
3336
|
-
"source_layer": "api",
|
|
3337
|
-
"destination_spec_node_id": "api.example",
|
|
3338
|
-
"destination_layer": "api",
|
|
3339
|
-
"predicate": "references",
|
|
3340
|
-
"cardinality": "many-to-many",
|
|
3341
|
-
"strength": "medium",
|
|
3342
|
-
"required": false
|
|
3343
|
-
},
|
|
3344
|
-
"api.servervariable.serves.api.operation": {
|
|
3345
|
-
"id": "api.servervariable.serves.api.operation",
|
|
3346
|
-
"source_spec_node_id": "api.servervariable",
|
|
3347
|
-
"source_layer": "api",
|
|
3348
|
-
"destination_spec_node_id": "api.operation",
|
|
3349
|
-
"destination_layer": "api",
|
|
3350
|
-
"predicate": "serves",
|
|
3351
|
-
"cardinality": "many-to-many",
|
|
3352
|
-
"strength": "medium",
|
|
3353
|
-
"required": false
|
|
3354
|
-
},
|
|
3355
|
-
"api.tag.aggregates.api.operation": {
|
|
3356
|
-
"id": "api.tag.aggregates.api.operation",
|
|
3357
|
-
"source_spec_node_id": "api.tag",
|
|
3358
|
-
"source_layer": "api",
|
|
3359
|
-
"destination_spec_node_id": "api.operation",
|
|
3360
|
-
"destination_layer": "api",
|
|
3361
|
-
"predicate": "aggregates",
|
|
3362
|
-
"cardinality": "many-to-many",
|
|
3363
|
-
"strength": "medium",
|
|
3364
|
-
"required": false
|
|
3365
|
-
},
|
|
3366
|
-
"api.tag.associated-with.api.schema": {
|
|
3367
|
-
"id": "api.tag.associated-with.api.schema",
|
|
3368
|
-
"source_spec_node_id": "api.tag",
|
|
3369
|
-
"source_layer": "api",
|
|
3370
|
-
"destination_spec_node_id": "api.schema",
|
|
3371
|
-
"destination_layer": "api",
|
|
3372
|
-
"predicate": "associated-with",
|
|
3373
|
-
"cardinality": "many-to-many",
|
|
3374
|
-
"strength": "medium",
|
|
3375
|
-
"required": false
|
|
3376
|
-
},
|
|
3377
|
-
"api.tag.associated-with.api.securityscheme": {
|
|
3378
|
-
"id": "api.tag.associated-with.api.securityscheme",
|
|
3379
|
-
"source_spec_node_id": "api.tag",
|
|
3380
|
-
"source_layer": "api",
|
|
3381
|
-
"destination_spec_node_id": "api.securityscheme",
|
|
3382
|
-
"destination_layer": "api",
|
|
3383
|
-
"predicate": "associated-with",
|
|
3384
|
-
"cardinality": "many-to-many",
|
|
3385
|
-
"strength": "medium",
|
|
3386
|
-
"required": false
|
|
2766
|
+
"required": false,
|
|
2767
|
+
"description": "The server meets the security policy, such as TLS-only access."
|
|
3387
2768
|
},
|
|
3388
2769
|
"api.tag.references.api.externaldocumentation": {
|
|
3389
2770
|
"id": "api.tag.references.api.externaldocumentation",
|
|
@@ -3394,18 +2775,8 @@
|
|
|
3394
2775
|
"predicate": "references",
|
|
3395
2776
|
"cardinality": "many-to-many",
|
|
3396
2777
|
"strength": "medium",
|
|
3397
|
-
"required": false
|
|
3398
|
-
|
|
3399
|
-
"api.tag.serves.api.operation": {
|
|
3400
|
-
"id": "api.tag.serves.api.operation",
|
|
3401
|
-
"source_spec_node_id": "api.tag",
|
|
3402
|
-
"source_layer": "api",
|
|
3403
|
-
"destination_spec_node_id": "api.operation",
|
|
3404
|
-
"destination_layer": "api",
|
|
3405
|
-
"predicate": "serves",
|
|
3406
|
-
"cardinality": "many-to-many",
|
|
3407
|
-
"strength": "medium",
|
|
3408
|
-
"required": false
|
|
2778
|
+
"required": false,
|
|
2779
|
+
"description": "The tag's externalDocs."
|
|
3409
2780
|
}
|
|
3410
2781
|
}
|
|
3411
2782
|
}
|