feat(compat): REST and JSONRPC servers compatible with 0.3 clients. by bartek-w · Pull Request #795 · a2aproject/a2a-python · GitHub
Skip to content

feat(compat): REST and JSONRPC servers compatible with 0.3 clients. - #795

Merged
bartek-w merged 1 commit into
1.0-devfrom
bartekw-compat-rest-server
Mar 11, 2026
Merged

bartek-w merged 1 commit into
1.0-devfrom
bartekw-compat-rest-server

Conversation

@bartek-w

@bartek-w bartek-w commented Mar 10, 2026 •

Copy link
Copy Markdown
Collaborator
  • Unified v0.3 Handling (grpc_handler.py): Refactored the CompatGrpcHandler to delegate directly to
    RequestHandler03, removing ad-hoc data transformations and unifying translation logic across all transports.
  • REST & JSONRPC Adapters: Implemented and tested legacy HTTP adapters. Added comprehensive tests in
    test_rest_handler.py and test_rest_fastapi_app_compat.py to validate exact JSON payload shapes and legacy
    routing (e.g., /v0.3/v1/message:send).
  • Feature Flag Integration: Introduced the enable_v0_3_compat flag for A2AStarletteApplication and
    A2ARESTFastAPIApplication. When disabled, legacy requests are securely rejected with standard errors to
    prevent overhead.
  • Cross-Version Integration: Upgraded the v1.0 reference test server (server_1_0.py) to announce and mount
    legacy REST interfaces. The automated test matrix now explicitly validates jsonrpc and rest paths alongside
    grpc.

Fixes #742

@bartek-w
bartek-w changed the base branch from main to 1.0-dev March 10, 2026 08:35
@bartek-w
bartek-w force-pushed the bartekw-compat-rest-server branch from 3d21fbe to 4d2589e Compare March 10, 2026 09:02
@gemini-code-assist

Copy link
Copy Markdown
Contributor

@bartek-w
bartek-w requested a review from ishymko March 10, 2026 09:09
@bartek-w
bartek-w marked this pull request as ready for review March 10, 2026 09:09
@bartek-w
bartek-w requested a review from a team as a code owner March 10, 2026 09:09

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a backward compatibility layer for v0.3 clients, which is a significant and well-structured feature. The use of adapter patterns for gRPC, JSON-RPC, and REST protocols is clean and effective. The changes are extensive, including new handlers, adapters, and comprehensive tests. My review identified one functional gap where some REST handlers are not implemented.

Note: Security Review did not run due to the size of the PR.

Comment thread src/a2a/compat/v0_3/rest_handler.py
@bartek-w
bartek-w force-pushed the bartekw-compat-rest-server branch from 4d2589e to cd395a1 Compare March 10, 2026 12:07
Comment thread src/a2a/server/apps/rest/fastapi_app.py
Comment thread src/a2a/server/apps/rest/fastapi_app.py
@bartek-w
bartek-w force-pushed the bartekw-compat-rest-server branch from cd395a1 to eca1389 Compare March 11, 2026 07:31
@bartek-w
bartek-w merged commit 9856054 into 1.0-dev Mar 11, 2026
9 checks passed
@bartek-w
bartek-w deleted the bartekw-compat-rest-server branch March 11, 2026 07:33
ishymko added a commit that referenced this pull request Mar 17, 2026
🤖 I have created a release *beep* *boop*
---


### ⚠ BREAKING CHANGES

* **spec**: upgrade SDK to A2A 1.0 spec and use proto-based types
([#572](#572),
[#665](#665),
[#804](#804),
[#765](#765))
* **client:** introduce ServiceParameters for extensions and include it
in ClientCallContext
([#784](#784))
* **client:** rename "callback" -> "push_notification_config"
([#749](#749))
* **client:** transport agnostic interceptors
([#796](#796))
([a910cbc](a910cbc))
* add `protocol_version` column to Task and PushNotificationConfig
models and create a migration
([#789](#789))
([2e2d431](2e2d431))
* **server:** implement `Resource Scoping` for tasks and push
notifications
([#709](#709))
([f0d4669](f0d4669))

### Features

* add GetExtendedAgentCardRequest as input parameter to
GetExtendedAgentCard method
([#767](#767))
([13a092f](13a092f))
* add validation for the JSON-RPC version
([#808](#808))
([6eb7e41](6eb7e41))
* **client:** expose close() and async context manager support on
abstract Client
([#719](#719))
([e25ba7b](e25ba7b))
* **compat:** AgentCard backward compatibility helpers and tests
([#760](#760))
([81f3494](81f3494))
* **compat:** GRPC client compatible with 0.3 server
([#779](#779))
([0ebca93](0ebca93))
* **compat:** GRPC server compatible with 0.3 client
([#772](#772))
([80d827a](80d827a))
* **compat:** legacy v0.3 protocol models, conversion logic and
utilities ([#754](#754))
([26835ad](26835ad))
* **compat:** REST and JSONRPC clients compatible with 0.3 servers
([#798](#798))
([08794f7](08794f7))
* **compat:** REST and JSONRPC servers compatible with 0.3 clients
([#795](#795))
([9856054](9856054))
* **compat:** set a2a-version header to 1.0.0
([#764](#764))
([4cb68aa](4cb68aa))
* **compat:** unify v0.3 REST url prefix and expand cross-version tests
([#820](#820))
([0925f0a](0925f0a))
* database forward compatibility: make `owner` field optional
([#812](#812))
([cc29d1f](cc29d1f))
* handle tenant in Client
([#758](#758))
([5b354e4](5b354e4))
* implement missing push notifications related methods
([#711](#711))
([041f0f5](041f0f5))
* implement rich gRPC error details per A2A v1.0 spec
([#790](#790))
([245eca3](245eca3))
* **rest:** add tenant support to rest
([#773](#773))
([4771b5a](4771b5a))
* send task as a first subscribe event
([#716](#716))
([e71ac62](e71ac62))
* **server, grpc:** Implement tenant context propagation for gRPC
requests. ([#781](#781))
([164f919](164f919))
* **server, json-rpc:** Implement tenant context propagation for
JSON-RPC requests.
([#778](#778))
([72a330d](72a330d))
* **server:** add v0.3 legacy compatibility for database models
([#783](#783))
([08c491e](08c491e))
* **spec:** add `tasks/list` method with filtering and pagination to the
specification
([#511](#511))
([d5818e5](d5818e5))
* use StreamResponse as push notifications payload
([#724](#724))
([a149a09](a149a09))
* **rest:** update REST error handling to use `google.rpc.Status`
([#838](#838))
([ea7d3ad](ea7d3ad))


### Bug Fixes

* add history length and page size validations
([#726](#726))
([e67934b](e67934b))
* allign error codes with the latest spec
([#826](#826))
([709b1ff](709b1ff))
* **client:** align send_message signature with BaseClient
([#740](#740))
([57cb529](57cb529))
* get_agent_card trailing slash when agent_card_path=""
([#799](#799))
([#800](#800))
([a55c97e](a55c97e))
* handle parsing error in REST
([#806](#806))
([bbd09f2](bbd09f2))
* Improve error handling for Timeout exceptions on REST and JSON-RPC
clients ([#690](#690))
([2acd838](2acd838))
* Improve streaming errors handling
([#576](#576))
([7ea7475](7ea7475))
* properly handle unset and zero history length
([#717](#717))
([72a1007](72a1007))
* return entire history when history_length=0
([#537](#537))
([acdc0de](acdc0de))
* return mandatory fields from list_tasks
([#710](#710))
([6132053](6132053))
* taskslist error on invalid page token and response serialization
([#814](#814))
([a102d31](a102d31))
* use correct REST path for Get Extended Agent Card operation
([#769](#769))
([ced3f99](ced3f99))
* Use POST method for REST endpoint /tasks/{id}:subscribe
([#843](#843))
([a0827d0](a0827d0))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: Ivan Shymko <ishymko@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat]: 0.3 compatibility

2 participants