As a library developer working with Substrate/Polkadot, I’ve been digging into the new JSON‑RPC spec, and overall I like it. It’s definitely more work for client library authors, but the separation between runtime‑specific types and the RPC interface is a what I liked more.
With the old RPCs, methods like chain_getHeader were always a bit messy, you’d get a JSON object whose actual structure depended on the runtime, with some fields turned into JSON while others were still SCALE‑encoded. You still needed metadata to fully decode it, which made the whole thing feel inconsistent.
With the new RPCs, for example chainHead_v1_header, you now get the full runtime header as SCALE, claenly and consistently. Much nicer to work with.
I’m currently migrating my project, Substrate4j (a Java library for Substrate/Polkadot — not released yet, but will be soon!), to the new RPCs.