JSON/REST does not declare its schema, it's like talking about type vs dynamic typed language.
You also have solutions like GraphQL that define a schema, or you can publish some kind of schema (a good thing to do) but use JSON instead of a binary format.
- https://github.com/project-flogo/grpc/blob/master/proto/grpc...
- https://github.com/OAI/OpenAPI-Specification/blob/main/examp...
Both your application and documentation will assume certain state to be true, but only with type checking you can actually verify if it's correct.
(I still like protobuf, but the schemas are a terrible reason to like it.)