--- published: true layout: post title: The Dimensions of the API Lifecycle image: >- https://kinlane-productions2.s3.amazonaws.com/algorotoscope-master/bf-skinner-hallway-mirrors-hotel.jpg tags: - Lifecycle - OpenAPI --- Ok, I’ve gotten my recent immersion in thinking about the API lifecycle to a place where I think I want to put it to work on an actual API. [I spent some on a draft OpenAPI extension to help guide my API lifecycle](https://apievangelist.com/2021/08/03/an-openapi-lifecycle-extension/). Then I went through [thirteen separate API lifecycle definitions that were shared with me](https://apievangelist.com/2021/03/11/what-is-your-api-lifecycle/) in an earlier blog post and [connected each stop along each API lifecycle to some element of the Postman API platform](https://apievangelist.com/2021/08/05/enabling-an-openapi-lifecycle/). This resulted in me further fleshing out my OpenAPI API lifecycle extension to a point that I feel it is wroth to use when guiding, demonstrating, managing, and governing one of my APIs. I don’t expect anyone to implement the full version of this, but I am hoping it is flexible enough that it can accommodate many different versions of the API lifecycle. This is why I tested it against those thirteen API lifecycle, because I wanted to see how it would hold up in theory to many different people’s versions. Here are some simple, basic, intermediate, and complete examples of what I am thinking this extension could be applied. ### Simple API Lifecycle Based upon what I’ve come across in issues in the OpenAPI spec repo, and what I’ve wanted when it comes to defining the API lifecycle, I wanted the API lifecycle extension to expand upon the versioning capabilities of the OpenAPI spec by allowing me to navigate between versions of the API, allowing me to walk backwards, forwards, and jump to the latest version. I also wanted it to provide me access to API environments, as well as the maturity and visibility of the API. I feel like these dimensions are pretty critical to exactly what the API lifecycle might mean on the ground within API Operations.
| # An extension for OpenAPI | |
| x-lifecycle: | |
| # Navigating Change | |
| version: | |
| current: 'http://example.com/next' | |
| next: 'http://example.com/next' | |
| previous: 'http://example.com/next' | |
| # Development | |
| # Staging | |
| # Production | |
| environments: | |
| # Environment for production | |
| - name: Production | |
| url: 'https://www.postman.com/environment' | |
| variables: | |
| base_url: 'http://example.com/production' | |
| api_key: 'xe3847d3J78393jkdm1123' | |
| # Design | |
| # Pre-Release | |
| # Active | |
| # Recommended | |
| # Retired | |
| # Deprecated | |
| maturity: 'Active' | |
| # Public | |
| # Internal | |
| # Group | |
| # Partner | |
| visibility: 'Public' |
| # An extension for OpenAPI | |
| x-lifecycle: | |
| # Navigating Change | |
| version: | |
| current: 'http://example.com/next' | |
| next: 'http://example.com/next' | |
| previous: 'http://example.com/next' | |
| # Development | |
| # Staging | |
| # Production | |
| environments: | |
| # Environment for production | |
| - name: Production | |
| url: 'https://www.postman.com/environment' | |
| variables: | |
| base_url: 'http://example.com/production' | |
| api_key: 'xe3847d3J78393jkdm1123' | |
| # Design | |
| # Pre-Release | |
| # Active | |
| # Recommended | |
| # Retired | |
| # Deprecated | |
| maturity: 'Active' | |
| # Public | |
| # Internal | |
| # Group | |
| # Partner | |
| visibility: 'Public' | |
| # Elements of the API Lifecycle | |
| elements: | |
| # Documentation | |
| documentation: | |
| label: Docs | |
| guidance: http://example.com/guidance | |
| elements: | |
| # Reference Documentation | |
| - type: reference | |
| title: Reference Documentation | |
| url: 'https://example.com/documentation' | |
| collection: 'https://www.postman.com/collection' | |
| # All Tests | |
| tests: | |
| label: Testing | |
| guidance: http://example.com/guidance | |
| elements: | |
| - type: contract | |
| title: Contract Testing | |
| url: 'https://example.com/contract-testing' | |
| collection: 'https://www.postman.com/collection' | |
| # All Monitors | |
| monitors: | |
| label: Monitors | |
| elements: | |
| - type: contract | |
| title: Contract Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' |
| # An extension for OpenAPI | |
| x-lifecycle: | |
| # Navigating Change | |
| version: | |
| current: 'http://example.com/next' | |
| next: 'http://example.com/next' | |
| previous: 'http://example.com/next' | |
| # Development | |
| # Staging | |
| # Production | |
| environments: | |
| # Environment for development | |
| - name: Development | |
| url: 'https://www.postman.com/environment' | |
| variables: | |
| base_url: 'http://example.com/development' | |
| api_key: 'xe3847d3J78393jkdm1123' | |
| # Environment for production | |
| - name: Production | |
| url: 'https://www.postman.com/environment' | |
| variables: | |
| base_url: 'http://example.com/production' | |
| api_key: 'xe3847d3J78393jkdm1123' | |
| # Design | |
| # Pre-Release | |
| # Active | |
| # Recommended | |
| # Retired | |
| # Deprecated | |
| maturity: 'Active' | |
| # Public | |
| # Internal | |
| # Group | |
| # Partner | |
| visibility: 'Public' | |
| # Elements of the API Lifecycle | |
| elements: | |
| # All Mocks | |
| mocks: | |
| label: Mocking | |
| elements: | |
| - type: sandbox | |
| title: Mock Server | |
| url: 'https://example.com/mock' | |
| collection: 'https://www.postman.com/collection' | |
| # Documentation | |
| documentation: | |
| label: Docs | |
| guidance: http://example.com/guidance | |
| elements: | |
| # Reference Documentation | |
| - type: reference | |
| title: Reference Documentation | |
| url: 'https://example.com/documentation' | |
| collection: 'https://www.postman.com/collection' | |
| # Management | |
| management: | |
| label: Manage | |
| guidance: http://example.com/guidance | |
| elements: | |
| # Onboarding | |
| - type: onboarding | |
| title: Login / Registration | |
| url: 'https://example.com/login' | |
| # Plan | |
| - type: aws-api-gateway-plan | |
| title: Plan | |
| url: 'https://console.aws.amazon.com/apigateway/home?#/usage-plans/859pid' | |
| # All Tests | |
| tests: | |
| label: Testing | |
| guidance: http://example.com/guidance | |
| elements: | |
| - type: contract | |
| title: Contract Testing | |
| url: 'https://example.com/contract-testing' | |
| collection: 'https://www.postman.com/collection' | |
| - type: performance | |
| title: Performance Testing | |
| url: 'https://example.com/performance-testing' | |
| collection: 'https://www.postman.com/collection' | |
| - type: security | |
| title: OWASP Top 10 | |
| url: 'https://example.com/owasp-security-testing' | |
| collection: 'https://www.postman.com/collection' | |
| # All Monitors | |
| monitors: | |
| label: Monitors | |
| elements: | |
| - type: uptime | |
| title: Uptime Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: security | |
| title: Recurring Security Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: contract | |
| title: Contract Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: performance | |
| title: US East Regional Performance Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: performance | |
| title: US West Regional Performance Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| # Observability | |
| observability: | |
| label: Observability | |
| elements: | |
| - type: reports | |
| title: Report Dashboard | |
| url: 'https://example.com/reports' | |
| - type: change-log | |
| title: Change Log | |
| url: 'https://example.com/change-log' | |
| - type: activity | |
| title: Activity | |
| url: 'https://example.com/activity' | |
| # Discovery | |
| discovery: | |
| label: Discovery | |
| elements: | |
| - type: network | |
| title: Public Network | |
| url: 'https://example.com/public-network' | |
| - type: workspace | |
| title: Public Workspace | |
| url: 'https://example.com/public-workspace' | |
| # Milestones for the API (Achieved and Target) | |
| milestones: | |
| # Design Review | |
| - type: design-review | |
| description: 'Went through design review.' | |
| date: '2021-06-01' | |
| # Staging | |
| - type: staging | |
| description: 'Left staging phase of development.' | |
| date: '2021-07-01' | |
| # Security Review | |
| - type: security-review | |
| description: 'Went through security review.' | |
| date: '2021-06-01' | |
| # Active | |
| - type: active | |
| description: 'Put into production as active API.' | |
| date: '2021-07-15' |
| # An extension for OpenAPI | |
| x-lifecycle: | |
| # Navigating Change | |
| version: | |
| current: 'http://example.com/next' | |
| next: 'http://example.com/next' | |
| previous: 'http://example.com/next' | |
| # Development | |
| # Staging | |
| # Production | |
| environments: | |
| # Environment for development | |
| - name: Development | |
| url: 'https://www.postman.com/environment' | |
| variables: | |
| base_url: 'http://example.com/development' | |
| api_key: 'xe3847d3J78393jkdm1123' | |
| # Environment for production | |
| - name: Production | |
| url: 'https://www.postman.com/environment' | |
| variables: | |
| base_url: 'http://example.com/production' | |
| api_key: 'xe3847d3J78393jkdm1123' | |
| # Design | |
| # Pre-Release | |
| # Active | |
| # Recommended | |
| # Retired | |
| # Deprecated | |
| maturity: 'Active' | |
| # Public | |
| # Internal | |
| # Group | |
| # Partner | |
| visibility: 'Public' | |
| # Elements of the API Lifecycle | |
| elements: | |
| # All Mocks | |
| mocks: | |
| label: Mocking | |
| elements: | |
| - type: sandbox | |
| title: Mock Server | |
| url: 'https://example.com/mock' | |
| collection: 'https://www.postman.com/collection' | |
| # Documentation | |
| documentation: | |
| label: Docs | |
| guidance: http://example.com/guidance | |
| elements: | |
| # Reference Documentation | |
| - type: reference | |
| title: Reference Documentation | |
| url: 'https://example.com/documentation' | |
| collection: 'https://www.postman.com/collection' | |
| # Onboarding Documentation | |
| - type: onboarding | |
| title: Onboarding Documentation | |
| url: 'https://example.com/documentation' | |
| collection: 'https://www.postman.com/collection' | |
| # Workflow Documentation | |
| - type: workflow | |
| title: Business Workflow Documentation | |
| url: 'https://example.com/documentation' | |
| collection: 'https://www.postman.com/collection' | |
| # Deployment | |
| deployment: | |
| label: Publishing | |
| guidance: http://example.com/guidance | |
| elements: | |
| # GitHub Repository | |
| - type: github | |
| title: Github Repository | |
| url: 'https://github.com/org/repo' | |
| sync: true | |
| # Pipeline | |
| - type: github-action | |
| title: Github Action | |
| url: 'https://github.com/org/repo/actions' | |
| # Gateway | |
| - type: aws-api-gateway | |
| title: AWS API Gateway | |
| url: ' https://uab3sjk0mna.execute-api.us-east-1.amazonaws.com' | |
| collection: 'https://www.postman.com/collection' | |
| sync: true | |
| # Management | |
| management: | |
| label: Manage | |
| guidance: http://example.com/guidance | |
| elements: | |
| # Onboarding | |
| - type: onboarding | |
| title: Login / Registration | |
| url: 'https://example.com/login' | |
| # Plan | |
| - type: aws-api-gateway-plan | |
| title: Plan | |
| url: 'https://console.aws.amazon.com/apigateway/home?#/usage-plans/859pid' | |
| # SDKs | |
| sdks: | |
| label: SDKs | |
| guidance: http://example.com/guidance | |
| elements: | |
| # Python | |
| - type: python | |
| title: Python Library | |
| url: 'https://github.com/sdks/python' | |
| # Node.js | |
| - type: node.js | |
| title: Node.js Library | |
| url: 'https://github.com/sdks/nodejs' | |
| # Go | |
| - type: go | |
| title: Go Library | |
| url: 'https://github.com/sdks/go' | |
| # All Tests | |
| tests: | |
| label: Testing | |
| guidance: http://example.com/guidance | |
| elements: | |
| - type: contract | |
| title: Contract Testing | |
| url: 'https://example.com/contract-testing' | |
| collection: 'https://www.postman.com/collection' | |
| - type: performance | |
| title: Performance Testing | |
| url: 'https://example.com/performance-testing' | |
| collection: 'https://www.postman.com/collection' | |
| - type: security | |
| title: OWASP Top 10 | |
| url: 'https://example.com/owasp-security-testing' | |
| collection: 'https://www.postman.com/collection' | |
| # All Monitors | |
| monitors: | |
| label: Monitors | |
| elements: | |
| - type: uptime | |
| title: Uptime Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: security | |
| title: Recurring Security Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: contract | |
| title: Contract Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: performance | |
| title: US East Regional Performance Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| - type: performance | |
| title: US West Regional Performance Testing Monitor | |
| url: 'https://example.com/monitor' | |
| collection: 'https://www.postman.com/collection' | |
| environment: 'https://www.postman.com/environment' | |
| # Observability | |
| observability: | |
| label: Observability | |
| elements: | |
| - type: reports | |
| title: Report Dashboard | |
| url: 'https://example.com/reports' | |
| - type: change-log | |
| title: Change Log | |
| url: 'https://example.com/change-log' | |
| - type: activity | |
| title: Activity | |
| url: 'https://example.com/activity' | |
| - type: apm | |
| title: Datadog | |
| url: 'https://datadog.com/dashboard' | |
| sync: true | |
| - type: aws-api-gateway | |
| title: Gateway Usage Report | |
| url: url: ' https://uab3sjk0mna.execute-api.us-east-1.amazonaws.com/usage' | |
| sync: true | |
| - type: uptime | |
| title: Uptime Monitor Results | |
| url: 'https://example.com/monitor/results' | |
| - type: security | |
| title: Recurring Security Testing Monitor Results | |
| url: 'https://example.com/monitor/results' | |
| - type: contract | |
| title: Contract Testing Monitor Results | |
| url: 'https://example.com/monitor/results' | |
| - type: performance | |
| title: US East Regional Performance Testing Monitor Results | |
| url: 'https://example.com/monitor/results' | |
| - type: performance | |
| title: US West Regional Performance Testing Monitor Results | |
| url: 'https://example.com/monitor/results' | |
| # Discovery | |
| discovery: | |
| label: Discovery | |
| elements: | |
| - type: network | |
| title: Private Network | |
| url: 'https://example.com/private-network' | |
| - type: network | |
| title: Public Network | |
| url: 'https://example.com/public-network' | |
| - type: workspace | |
| title: Private Workspace | |
| url: 'https://example.com/private-workspace' | |
| - type: workspace | |
| title: Public Workspace | |
| url: 'https://example.com/public-workspace' | |
| # Governance | |
| governance: | |
| label: Governance | |
| rules: | |
| - type: design-rules | |
| title: Design Rules | |
| url: 'https://example.com/design-rules' | |
| - type: management-rules | |
| title: Management Rules | |
| url: 'https://example.com/management-rules' | |
| - type: documentation-rules | |
| title: Documentation Rules | |
| url: 'https://example.com/documentation-rules' | |
| - type: testing-rules | |
| title: Testing Rules | |
| url: 'https://example.com/testing-rules' | |
| # Milestones for the API (Achieved and Target) | |
| milestones: | |
| # Design | |
| - type: design | |
| description: 'Design agreed upon by stakeholders.' | |
| date: '2021-05-01' | |
| # Design Review | |
| - type: design-review | |
| description: 'Went through design review.' | |
| date: '2021-06-01' | |
| # Staging | |
| - type: staging | |
| description: 'Left staging phase of development.' | |
| date: '2021-07-01' | |
| # Security Review | |
| - type: security-review | |
| description: 'Went through security review.' | |
| date: '2021-06-01' | |
| # Active | |
| - type: active | |
| description: 'Put into production as active API.' | |
| date: '2021-07-15' | |
| # Retire | |
| - type: retire | |
| description: 'Planned retirement date.' | |
| date: '2025-07-15' | |
| # Deprecation | |
| - type: deprecation | |
| description: 'Planned deprecation date.' | |
| date: '2025-12-15' |