Top 5 things you need to know about Protocol Buffers on iOS

Protocol Buffers

Protocol buffers are a way of encoding data in an efficient yet extensible way, according to the official documentation from Google.

They are language-agnostic methods developed by Google for serializing structured data.With a .proto file defined, just passing the file into the protocol buffer compiler will generate data access classes in the supported languages of your choice.This is achieved through the compiler interpreting the message, mapping the value types to the chosen language and generating the appropriate model object files.

Once a data structure is defined in protocol buffers, the compiler can generate code in any language. This allows them certain benefits of use over the conventional data exchange formats of JSON and XML, which require extensive serialization and deserialization coding.

The following points explain how protocol buffers are revolutionizing the way data is exchanged by modern apps:

They help retain schema

In protocol buffers, a message construct in the .proto file defines the schema or data structure of an object.

In traditional data transfer methods, the entire object structure of the entities is platform dependent. When it is to be shared over the Internet with other application or service, the structural constraints of the object may be lost.

When a data structure is defined in protocol buffers, the schema as well as the business rules are bound to be implemented irrespective of the platforms over which they are being exchanged.

Default backward compatibility

As the application version evolves, there may be unavoidable changes to the data structures, which are difficult to replicate across the application especially when the version features add-on components that impose these data structure modifications.

The design of protocol buffers is such that they eliminate the need for background compatibility checks. They have numbered fields so that when new fields are introduced, intermediate servers could parse the data without requiring knowing all fields of the data structure.

Automatic deserialization

While techniques like JSON and XML require hand-written ad-hoc code to be repeated across the application leading to unnecessary boilerplate code overhead, protocol buffers do not require any hand parsing. This makes them more secure, as there is no business logic handled in the .proto files, which form the basic format being exchanged. This allows the developers to focus on other critical aspects of iOS App development and Designs rather than repetitive parse code that also contains sensitive business logic.

Validations and extensibility

The data structures defined by protocol buffers are strict and flexible at the same time – strict in terms of validations and flexible in terms of extensibility.

The required, optional, and repeated keywords indicate whether a field can be left blank or not. This determines how classes in each language work with these protocol buffers. The protocol buffer library raises extensions whenever a code violates the field restrictions set by the required, optionaland repeated keywords.

In order to modify the above settings in a protocol buffer, all that needs to be done is to add new numbered fields with the modified value of the keyword. According to the version accessing the data structure, the appropriate value will be accessed, thus preserving backward compatibility and enhancing the extensibility of the application.

Easy language interoperability

Interoperability in polyglot applications is much easier using protocol buffers. Introducing a new service or accessing a backend code written in multiple languages is completely easy and safe as it just requires handing over of the .proto file to the code generator written in target languages.


Protocol buffers should be the preferred format of data exchange in systems built using multiple languages, unless the applications explicitly require leveraging JSON or XML due to factors like need of human readable data, or direct consumption of web services by a browser.

Written by stephenannabelle

Annabelle Stephena is an Senior app developer, mobility strategist and Team Leader.

Comment Below