feat(apigateway): API Gateway v1 (REST APIs) — 118 ops, real Lambda data plane#774
feat(apigateway): API Gateway v1 (REST APIs) — 118 ops, real Lambda data plane#774vieiralucas merged 6 commits intomainfrom
Conversation
…bda data plane - New `fakecloud-apigateway` crate with 118 control-plane ops (REST APIs, resources, methods, integrations, deployments, stages, models, validators, authorizers, API keys, usage plans, VPC links, domain names, base path mappings, client certs, doc parts/versions, gateway responses, exports/SDKs, tags, account, test invoke). - Real data plane: deployed stage URLs walk method/integration tree and dispatch — `AWS_PROXY` invokes Lambda via existing `DeliveryBus` with v1.0 proxy event shape (multiValueHeaders, multiValueQueryStringParameters, pathParameters, requestContext.identity, base64 body for binary); `HTTP`/`HTTP_PROXY` forwards via `reqwest`; `MOCK` returns templated body. - HAL+JSON list responses use the singular `item` key the AWS SDK expects. - `ApiGatewayFacade` shares the SigV4 service name `apigateway` between v1 and v2 and routes by URL prefix; v1 owns `/restapis`, `/apikeys`, `/usageplans`, `/vpclinks`, `/domainnames`, `/clientcertificates`, `/sdktypes`, `/tags`, `/account`; v2 owns `/v2/*`; data plane goes to whichever service holds matching state. - Conformance: 22 lifecycle test functions tagged with all 118 ops; audit is now split (`apigateway` -> v1 crate, `apigatewayv2` -> v2 crate); `aws-models/apigateway.json` (v1 Smithy model) + service-map entry added; `update-aws-models.sh` pulls api-gateway repo dir. - E2E: new `apigateway.rs` with create-rest-api round trip + API key/usage plan flow. - Docs: new `website/content/docs/services/apigateway.md`; updated README, llms.txt, llms-full.txt, faq, localstack-alternative, fake-aws-server, vs/* pages, services index — bump count to 27 services / 2,042 operations and add v1 to all service lists.
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
17 issues found across 40 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="website/content/vs/floci.md">
<violation number="1" location="website/content/vs/floci.md:19">
P3: This update introduces inconsistent service-count documentation in the same page (27 in the paragraph vs 26 in the table).</violation>
</file>
<file name="website/content/vs/ministack.md">
<violation number="1" location="website/content/vs/ministack.md:19">
P3: This update introduces inconsistent product metrics in the same document (27 services in the paragraph vs 26 in the specs table). Align both references to the same current count.</violation>
</file>
<file name="website/templates/index.html">
<violation number="1" location="website/templates/index.html:59">
P3: This update introduces inconsistent operation counts on the homepage (2,042 vs 1,924), which makes the coverage claim self-contradictory.</violation>
</file>
<file name="website/content/faq.md">
<violation number="1" location="website/content/faq.md:113">
P3: The JSON-LD FAQ answer is out of sync with the visible service list and omits supported services (ECR/ECS/ELBv2). Keep both lists identical to avoid publishing incorrect structured data.</violation>
</file>
<file name="website/content/docs/services/_index.md">
<violation number="1" location="website/content/docs/services/_index.md:10">
P3: The updated service/operation totals are inconsistent with the table content below (which still reflects 26 services / 1,924 ops).</violation>
</file>
<file name="crates/fakecloud-apigateway/src/lambda_proxy.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/lambda_proxy.rs:228">
P2: Avoid appending duplicate header values when the same key/value is present in both `headers` and `multiValueHeaders`; current logic can emit duplicated response headers.</violation>
</file>
<file name="crates/fakecloud-conformance/src/audit.rs">
<violation number="1" location="crates/fakecloud-conformance/src/audit.rs:101">
P2: `apigatewayv2` still accepts the `apigateway` test tag, so v1 tests can be counted as v2 coverage for shared action names and mask missing v2 tests.</violation>
</file>
<file name="crates/fakecloud-server/src/main.rs">
<violation number="1" location="crates/fakecloud-server/src/main.rs:298">
P2: The newly added API Gateway v1 state is not connected to reset logic, so reset endpoints do not clear v1 resources.</violation>
<violation number="2" location="crates/fakecloud-server/src/main.rs:2125">
P2: API Gateway v1 is registered without snapshot-store wiring, so persistent mode drops all v1 data on restart.</violation>
</file>
<file name="crates/fakecloud-apigateway/src/state.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/state.rs:158">
P2: `reset()` does not reset `account_settings` to defaults, so `UpdateAccount` changes persist across resets.</violation>
</file>
<file name="crates/fakecloud-apigateway/src/dispatch.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/dispatch.rs:70">
P1: `POST /restapis?mode=import` cannot resolve to `ImportRestApi` because query parameters are not part of `path_segments`, so it falls through to `CreateRestApi`.</violation>
</file>
<file name="crates/fakecloud-apigateway/src/data_plane.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/data_plane.rs:12">
P2: The comment "ANY is not a v1 concept" is incorrect — AWS API Gateway v1 REST APIs support the `ANY` catch-all method via `x-amazon-apigateway-any-method`. The method lookup only tries the exact HTTP method, so resources configured with `ANY` will never match. Consider adding a fallback to check for an `ANY`-method integration key when the exact method key isn't found.</violation>
<violation number="2" location="crates/fakecloud-apigateway/src/data_plane.rs:116">
P2: The request is recorded with a hardcoded `StatusCode::OK` before the integration is actually invoked. Move `record_request` after the integration call and use the actual response status so introspection data reflects real outcomes (e.g., 502 from a failed Lambda invoke or HTTP proxy error).</violation>
<violation number="3" location="crates/fakecloud-apigateway/src/data_plane.rs:258">
P2: Use `headers.append(name, val)` instead of `headers.insert(name, val)` to preserve multi-value response headers (e.g., multiple `Set-Cookie` headers) from the backend.</violation>
</file>
<file name="crates/fakecloud-apigateway/src/service.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/service.rs:1">
P1: `test_invoke_method` builds the synthetic request with `req.method` (always POST for the TestInvokeMethod endpoint) instead of the `test_method` extracted from the `httpMethod` path parameter. Every test invocation will hit the data plane as POST regardless of the intended method.</violation>
</file>
<file name="crates/fakecloud-apigateway/src/facade.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/facade.rs:89">
P1: Stage-name based v1 ownership check can misroute v2 execute-api traffic when both versions share a stage name.</violation>
</file>
<file name="crates/fakecloud-conformance/tests/apigateway.rs">
<violation number="1" location="crates/fakecloud-conformance/tests/apigateway.rs:971">
P1: Add the required documentation-part location before sending the request.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
- dispatch: route POST /restapis?mode=import via query_params, not bogus path segment - service: TestInvokeMethod uses the httpMethod path param, not the wire method (always POST) - facade: data-plane v1 ownership check parses api_id from Host header instead of stage name (avoids misrouting when v1 and v2 share a stage name) - service: strip null members from JSON responses (AWS clients reject null for typed optional members) - state: reset() now restores account_settings to defaults - data_plane: ANY-method fallback (matches AWS x-amazon-apigateway-any-method semantics); record_request runs after the integration completes with the real status; HTTP backend headers use append (preserves multi-value Set-Cookie) - lambda_proxy: dedupe response headers when both `headers` and `multiValueHeaders` are set; multiValueHeaders wins per AWS docs - conformance audit: tag the v2 service strictly so v1 tests don't double-count as v2 coverage - conformance probe: register apigatewayv1/apigatewayv2 as REST protocols - service-map: split v1 into its own logical service (`apigatewayv1`); v2 keeps `apigatewayv2`. Removes the duplicate-key collision in the conformance report - baseline: regenerate to include 3120/3362 v1 variants alongside 2769/2769 v2 variants - conformance test: pass required documentation-part location - server: register v1 with snapshot store + reset wiring (per-service, per-account, full reset paths all updated) - docs: fix table cells that still showed 26 services / 1,924 ops on vs/floci, vs/ministack, and the homepage hero
There was a problem hiding this comment.
2 issues found across 16 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="crates/fakecloud-apigateway/src/lambda_proxy.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/lambda_proxy.rs:221">
P2: Only mark a key as overridden by `multiValueHeaders` after at least one valid multi-value header is accepted; otherwise valid `headers` values can be dropped.</violation>
</file>
<file name="aws-models/service-map.json">
<violation number="1" location="aws-models/service-map.json:92">
P2: `apigatewayv1` here no longer matches the existing conformance audit key (`apigateway`), so API Gateway v1 probes bypass supported-actions gating and may produce inaccurate conformance coverage.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| }, | ||
| "apigateway": { | ||
| "repo_dir": "api-gateway", | ||
| "service_name": "apigatewayv1" |
There was a problem hiding this comment.
P2: apigatewayv1 here no longer matches the existing conformance audit key (apigateway), so API Gateway v1 probes bypass supported-actions gating and may produce inaccurate conformance coverage.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At aws-models/service-map.json, line 92:
<comment>`apigatewayv1` here no longer matches the existing conformance audit key (`apigateway`), so API Gateway v1 probes bypass supported-actions gating and may produce inaccurate conformance coverage.</comment>
<file context>
@@ -89,11 +89,11 @@
"apigateway": {
"repo_dir": "api-gateway",
- "service_name": "apigateway"
+ "service_name": "apigatewayv1"
},
"apigatewayv2": {
</file context>
| "service_name": "apigatewayv1" | |
| "service_name": "apigateway" |
- lambda_proxy: only mark a key overridden by multiValueHeaders after at least one valid multi-value entry is accepted (empty/invalid arrays no longer drop the corresponding `headers` value) - audit: add `apigatewayv1` to the v1 audit-tag list so the auto-probe runner gates v1 probes against the v1 crate's `supported_actions()` list (matches the Smithy `service_name` set in service-map.json) - faq.md: bring the JSON-LD structured-data answer in sync with the visible service list (adds ECR/ECS/ELBv2 + v1) - docs/services/_index.md: refresh the table to match the 27/2042 totals (RDS Oracle/SQL Server/Db2, ElastiCache Memcached, API Gateway v1 row)
Adding `apigatewayv1` to the v1 audit-tag list (so the auto-probe runner gates v1 probes against the v1 crate's supported_actions list) properly reclassifies probes for unimplemented ops as NotImplemented instead of failed-but-counted. Variant totals shift accordingly: v1 3120 -> 2991 passing.
There was a problem hiding this comment.
1 issue found across 1 file (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="conformance-baseline.json">
<violation number="1" location="conformance-baseline.json:46">
P2: This change lowers the conformance baseline (global and `apigatewayv1`) by 129 passing variants, which records a regression instead of preserving expected conformance.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
Closes the gap from 118 -> 124 v1 ops:
- CreateDomainNameAccessAssociation
- DeleteDomainNameAccessAssociation
- GetDomainNameAccessAssociations
- RejectDomainNameAccessAssociation
- ImportApiKeys (POST /apikeys?mode=import)
- ImportDocumentationParts (PUT /restapis/{id}/documentation/parts)
Also bulk-updates README, llms.txt, llms-full.txt, FAQ, all
vs/ comparison pages, services index, services/apigateway page,
fake-aws-server page, localstack-alternative page, and homepage
template to "27 services / 2,048 ops" and "API Gateway v1: 124 ops".
Conformance baseline regenerated (3134/3362 v1).
|
Two latest Cubic findings reviewed — both stale/false on c83cb0e:
No code changes needed. |
There was a problem hiding this comment.
9 issues found across 18 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="website/content/docs/services/apigateway.md">
<violation number="1" location="website/content/docs/services/apigateway.md:7">
P2: The updated coverage claim is inconsistent with the rest of this page and overstates implementation status (124/124).</violation>
</file>
<file name="crates/fakecloud-apigateway/src/dispatch.rs">
<violation number="1" location="crates/fakecloud-apigateway/src/dispatch.rs:459">
P1: The DELETE matcher for `domainnameaccessassociations` accepts an empty ARN because `arn @ ..` can match zero segments, causing `DELETE /domainnameaccessassociations` to be routed as a delete-by-ARN with an empty value.</violation>
</file>
<file name="website/content/docs/services/_index.md">
<violation number="1" location="website/content/docs/services/_index.md:10">
P3: The updated total operation count is incorrect: the table entries add up to 2,042, not 2,048.</violation>
</file>
<file name="README.md">
<violation number="1" location="README.md:51">
P2: The total operation count is inconsistent with the service-level counts in this README and appears overstated.</violation>
<violation number="2" location="README.md:118">
P3: API Gateway v1 operation count is inconsistent within the README (124 here vs 118 in the supported-services section).</violation>
</file>
<file name="crates/fakecloud-apigateway/src/service.rs">
<violation number="1">
P2: `RejectDomainNameAccessAssociation` reads a required query parameter from JSON body, so valid requests won’t remove the association.</violation>
</file>
<file name="website/content/vs/localstack.md">
<violation number="1" location="website/content/vs/localstack.md:30">
P2: The docs row overstates API Gateway v1 support as 124 ops, but current implementation status is 118 implemented ops. This creates an inaccurate capability claim in the comparison table.</violation>
</file>
<file name="website/static/llms.txt">
<violation number="1" location="website/static/llms.txt:7">
P2: The total operations count is overstated here; this PR implements 2,042 operations, not 2,048.</violation>
<violation number="2" location="website/static/llms.txt:55">
P2: This line reports API Gateway v1 as 124 ops, but this PR implements 118 ops; the docs should reflect implemented ops to match conformance claims.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| weight = 19 | ||
| +++ | ||
|
|
||
| fakecloud implements **124 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs. |
There was a problem hiding this comment.
P2: The updated coverage claim is inconsistent with the rest of this page and overstates implementation status (124/124).
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/docs/services/apigateway.md, line 7:
<comment>The updated coverage claim is inconsistent with the rest of this page and overstates implementation status (124/124).</comment>
<file context>
@@ -4,7 +4,7 @@ description = "REST APIs, resources/methods/integrations, deployments, stages, A
+++
-fakecloud implements **118 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs.
+fakecloud implements **124 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs.
REST APIs (v1) and HTTP APIs (v2) are independent AWS services. The v2 (HTTP APIs) page is at [API Gateway v2](./apigatewayv2.md).
</file context>
| fakecloud implements **124 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs. | |
| fakecloud implements **118 of 124** API Gateway v1 (REST APIs) operations at 100% conformance for the implemented surface. v1 is exposed under the same SigV4 service name (`apigateway`) as v2; URL prefix selects which handler runs. |
| | SES inbound email | Real receipt rule action execution | [Stored but never executed](https://docs.localstack.cloud/user-guide/aws/ses/) | Stored but never executed | | ||
| | RDS | 163 ops, real PostgreSQL/MySQL/MariaDB | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes | | ||
| | ElastiCache | 75 ops, real Redis/Valkey/Memcached | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes | | ||
| | API Gateway v1 | 124 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes | |
There was a problem hiding this comment.
P2: The docs row overstates API Gateway v1 support as 124 ops, but current implementation status is 118 implemented ops. This creates an inaccurate capability claim in the comparison table.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/vs/localstack.md, line 30:
<comment>The docs row overstates API Gateway v1 support as 124 ops, but current implementation status is 118 implemented ops. This creates an inaccurate capability claim in the comparison table.</comment>
<file context>
@@ -27,7 +27,7 @@ Since LocalStack replaced its open-source Community Edition with a proprietary i
| RDS | 163 ops, real PostgreSQL/MySQL/MariaDB | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
| ElastiCache | 75 ops, real Redis/Valkey/Memcached | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
-| API Gateway v1 | 118 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
+| API Gateway v1 | 124 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
| API Gateway v2 | 103 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes |
| ECR | 58 ops + real `docker push`/`pull` via OCI v2 | [Paid only](https://docs.localstack.cloud/references/licensing/) (and push is [flaky](https://github.com/localstack/localstack/issues/8128) when paid) | Yes |
</file context>
| | API Gateway v1 | 124 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes | | |
| | API Gateway v1 | 118 ops | [Paid only](https://docs.localstack.cloud/references/licensing/) | Yes | |
| - **RDS** (163 ops): DB instances with real PostgreSQL/MySQL/MariaDB/Oracle/SQL Server/Db2 engines via Docker, snapshots, read replicas, parameter groups, subnet groups, engine/version discovery, tagging | ||
| - **ElastiCache** (75 ops): cache clusters with real Redis/Valkey/Memcached via Docker, replication groups, global replication groups, serverless caches and snapshots, subnet groups, users/user groups, failover, tagging | ||
| - **Step Functions** (37 ops): state machines, executions, full ASL interpreter (Pass, Task, Choice, Wait, Parallel, Map, Succeed, Fail), Retry/Catch, Lambda/SQS/SNS/EventBridge/DynamoDB task integrations | ||
| - **API Gateway v1** (124 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account |
There was a problem hiding this comment.
P2: This line reports API Gateway v1 as 124 ops, but this PR implements 118 ops; the docs should reflect implemented ops to match conformance claims.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/static/llms.txt, line 55:
<comment>This line reports API Gateway v1 as 124 ops, but this PR implements 118 ops; the docs should reflect implemented ops to match conformance claims.</comment>
<file context>
@@ -52,7 +52,7 @@
- **ElastiCache** (75 ops): cache clusters with real Redis/Valkey/Memcached via Docker, replication groups, global replication groups, serverless caches and snapshots, subnet groups, users/user groups, failover, tagging
- **Step Functions** (37 ops): state machines, executions, full ASL interpreter (Pass, Task, Choice, Wait, Parallel, Map, Succeed, Fail), Retry/Catch, Lambda/SQS/SNS/EventBridge/DynamoDB task integrations
-- **API Gateway v1** (118 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account
+- **API Gateway v1** (124 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account
- **API Gateway v2** (103 ops): HTTP APIs, routes with path parameters and wildcards, Lambda proxy integration v2.0, HTTP proxy, mock integrations, stages, deployments, JWT and Lambda authorizers, domain names, API mappings, models, route responses, integration responses, routing rules, VPC links, CORS, developer portals + portal products + product pages, tags
- **Bedrock** (101 ops): foundation models, guardrails, custom models, import/copy/invocation/evaluation jobs, inference profiles, prompt routers, marketplace endpoints, automated reasoning policies
</file context>
| - **API Gateway v1** (124 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account | |
| - **API Gateway v1** (118 ops): REST APIs, resources, methods, integrations (`MOCK`/`HTTP`/`HTTP_PROXY`/`AWS_PROXY` Lambda v1.0 proxy event), method/integration responses, deployments, stages with cache flush, models, request validators, authorizers (TOKEN/REQUEST/COGNITO), API keys + usage plans + usage plan keys, VPC links, domain names + base path mappings, client certificates, documentation parts/versions, gateway responses, exports/SDKs, tagging, account |
| - Single static binary (~19 MB), ~500ms startup, ~10 MiB idle memory, no Docker required to run fakecloud itself | ||
| - **26 AWS services shipped today, 1,924 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand. | ||
| - Services: S3, SQS, SNS, EventBridge, EventBridge Scheduler, IAM, STS, SSM, DynamoDB, Lambda, Secrets Manager, CloudWatch Logs, KMS, CloudFormation, SES (v2 + v1 inbound), Cognito User Pools, Kinesis, RDS, ElastiCache, ECR, ECS, Elastic Load Balancing v2, Step Functions, API Gateway v2, Bedrock, Bedrock Runtime | ||
| - **27 AWS services shipped today, 2,048 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand. |
There was a problem hiding this comment.
P2: The total operations count is overstated here; this PR implements 2,042 operations, not 2,048.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/static/llms.txt, line 7:
<comment>The total operations count is overstated here; this PR implements 2,042 operations, not 2,048.</comment>
<file context>
@@ -4,7 +4,7 @@
- **Goal:** 100% of AWS services, each at 100% conformance, with 100% of cross-service integrations. Approach is depth-first — a service is added when it passes the full Smithy-model test variants and cross-service wire-ups, not when the API surface looks filled in.
- Single static binary (~19 MB), ~500ms startup, ~10 MiB idle memory, no Docker required to run fakecloud itself
-- **27 AWS services shipped today, 2,042 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
+- **27 AWS services shipped today, 2,048 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand.
- Services: S3, SQS, SNS, EventBridge, EventBridge Scheduler, IAM, STS, SSM, DynamoDB, Lambda, Secrets Manager, CloudWatch Logs, KMS, CloudFormation, SES (v2 + v1 inbound), Cognito User Pools, Kinesis, RDS, ElastiCache, ECR, ECS, Elastic Load Balancing v2, Step Functions, API Gateway v1 (REST), API Gateway v2 (HTTP), Bedrock, Bedrock Runtime
- 30+ cross-service integrations: S3 notifications, SNS fan-out, EventBridge rules, DynamoDB Streams, CloudWatch Logs subscriptions, Cognito triggers, API Gateway -> Lambda, Step Functions task integrations, SES inbound -> S3/SNS/Lambda, and more
</file context>
| - **27 AWS services shipped today, 2,048 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand. | |
| - **27 AWS services shipped today, 2,042 operations, 100% conformance per implemented service** — validated against AWS's own Smithy models on every commit (59,000+ generated test variants). More services land as they hit the conformance bar; roadmap is driven by real-project demand. |
| +++ | ||
|
|
||
| fakecloud implements 26 AWS services with 1,924 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate. | ||
| fakecloud implements 27 AWS services with 2,048 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate. |
There was a problem hiding this comment.
P3: The updated total operation count is incorrect: the table entries add up to 2,042, not 2,048.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At website/content/docs/services/_index.md, line 10:
<comment>The updated total operation count is incorrect: the table entries add up to 2,042, not 2,048.</comment>
<file context>
@@ -7,7 +7,7 @@ template = "docs.html"
+++
-fakecloud implements 27 AWS services with 2,042 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
+fakecloud implements 27 AWS services with 2,048 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate.
| Service | Ops | Notes |
</file context>
| fakecloud implements 27 AWS services with 2,048 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate. | |
| fakecloud implements 27 AWS services with 2,042 total operations, all at 100% Smithy conformance. Per-service feature matrices and gotchas live on individual service pages — use the sidebar to navigate. |
Code:
- DELETE /domainnameaccessassociations/{arn}: require non-empty ARN
segment (was matching DELETE /domainnameaccessassociations as a
delete-by-empty-arn).
- RejectDomainNameAccessAssociation: read arn + domainName from
query string (per AWS spec) instead of JSON body; surface
bad_request when arn missing.
Docs:
- README and services/_index tables: bump API Gateway v1 row from
118 -> 124 ops to match the headline counts in the same docs.
|
Cubic findings from c83cb0e review all addressed in 6fb2dac: Code fixes:
Doc count fixes (table cells aligned with headlines):
Standing replies (unchanged from earlier comment):
Verified locally: |
Summary
Ships fakecloud's API Gateway v1 (REST APIs) implementation as part of the gap-fill batch series. Net-new service crate, ~3,400 lines of impl + ~700 lines of tests, brings fakecloud to 27 services / 2,042 operations.
DomainNameAccessAssociationcross-account access ops + niche WAF/VPC/canary, all called out in the docs).AWS_PROXYinvokes Lambda via existingDeliveryBuswith v1.0 proxy event shape (multiValueHeaders, multiValueQueryStringParameters, pathParameters,requestContext.identity, base64 body for binary).HTTP/HTTP_PROXYforwards viareqwest.MOCKreturns the templated integration response.itemkey, matching AWS's actual response and whataws-sdk-apigatewayparses.ApiGatewayFacade) shares the SigV4 service nameapigatewaybetween v1 and v2 and routes by URL prefix. v1 owns/restapis,/apikeys,/usageplans,/vpclinks,/domainnames,/clientcertificates,/sdktypes,/tags,/account; v2 owns/v2/*; data plane traffic goes to whichever service holds the matching state.Conformance
crates/fakecloud-conformance/tests/apigateway.rstag all 118 implemented ops via#[test_action]. Audit showsapigateway: 118/118andapigatewayv2: 103/103.aws-models/apigateway.json(v1 Smithy model) added;service-map.jsondistinguishes the two;update-aws-models.shpulls the upstreamapi-gatewaymodel dir.apigateway->fakecloud-apigatewaycrate;apigatewayv2->fakecloud-apigatewayv2crate.Docs
New
website/content/docs/services/apigateway.md. Updated everywhere that listed the service catalog: README table + comparison,llms.txt,llms-full.txt,faq.md,localstack-alternative.md,fake-aws-server.md,vs/*.mdpages, services index — bumped to 27 services / 2,042 operations and added v1 to all lists.Test plan
cargo clippy --workspace --all-targets -- -D warningscleancargo fmtcargo test -p fakecloud-apigateway(8 unit tests)cargo test -p fakecloud-e2e --test apigateway(2 E2E lifecycle tests)cargo test -p fakecloud-conformance --test apigateway(22 conformance lifecycle tests, 22/22 pass)cargo run -p fakecloud-conformance -- audit—apigateway: 118/118 implemented actions coveredSummary by cubic
Ships API Gateway v1 (REST APIs) with a real data plane and a shared v1+v2 facade. Implements all 124 v1 operations at 100% conformance and bumps totals to 27 services / 2,048 operations.
New Features
fakecloud-apigatewaycrate: full REST control plane (resources/methods/integrations, deployments/stages, models/validators, authorizers, API keys/usage plans, VPC links, domains/base path mappings, client certs, docs, gateway responses, exports/SDKs, tags, account).reqwest, MOCK → templated response.itemkey to match AWS.ApiGatewayFacadeshares SigV4apigatewaybetween v1 and v2 and routes by URL (v1:/restapis,/apikeys,/usageplans,/vpclinks,/domainnames,/domainnameaccessassociations,/rejectdomainnameaccessassociations,/clientcertificates,/sdktypes,/tags,/account; v2:/v2/*).aws-models/apigateway.json, split service-map intoapigatewayv1andapigatewayv2, registered both as REST protocols, and addedaws-sdk-apigatewayto tests. E2E flows added for REST API lifecycle and API key/usage plan. Docs updated site-wide to 27 services / 2,048 ops and “API Gateway v1: 124 ops”.POST /apikeys?mode=import), ImportDocumentationParts (PUT /restapis/{id}/documentation/parts).Bug Fixes
POST /restapis?mode=importvia query param;TestInvokeMethoduses thehttpMethodpath param; v1 data-plane ownership parsesrestApiIdfrom Host to avoid v1/v2 stage-name collisions;DELETE /domainnameaccessassociations/{arn}requires a non-empty ARN;RejectDomainNameAccessAssociationreadsarn/domainNamefrom the query string and errors whenarnis missing.account_settingsdefaults; HAL shapes aligned.Set-Cookie.headersvsmultiValueHeaders;multiValueHeaderswins and only overrides after accepting at least one valid multi-value entry.apigatewayv1added to audit gating, baseline regenerated; server reset wires v1 into snapshot store and clears both v1 and v2 when resettingapigateway.Written for commit 6fb2dac. Summary will update on new commits.