SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Protobuf it!
Александр Мокров
Serialization
/
Deserialization
Python
Go
C++
C#
JavaScript
W3C
Annotea
CC/PP
Compound Document
Formats
CSS
DOM
HTML
HTTP
InkML
MathML
OWL
PICS
PNG
P3P
RDF
SMIL
SPARQL
Style
SVG
TAG
Timed Text
URI/URL
Voice Browser
WAI
WAI-ARIA
WebCGM
Web Services
XML
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML
XPath XSLT XQuery
XInclude
XSDXLink
XML Schema
DTD
XKMS
XML
Encryption
XPointer
XHTML
XForms
Google
XML but smaller,
faster and simpler
Protocol Buffers
C++
Java
Python
Objective-C
C#
JavaNano
JavaScript
Ruby
Go
PHP
Dart
Twitter
Protobuf vs XML
are simpler
are 3 to 10 times smaller
are 20 to 100 times faster
are less ambiguous
generate data access classes that are easier to
use programmatically
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
message Person {
string name = 1;
int32 id = 2;
string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phone = 4;
}
protoc -I=$SRC_DIR --python_out=$DST_DIR $SRC_DIR/person.proto
↓
person_pb2.py
>>> from person_pb2 import Person
Compiling
Person = _reflection.GeneratedProtocolMessageType('Person',
(_message.Message,), dict(
PhoneNumber =
_reflection.GeneratedProtocolMessageType('PhoneNumber',
(_message.Message,), dict(
DESCRIPTOR = _PERSON_PHONENUMBER,
__module__ = 'person_pb2'
# @@protoc_insertion_point(class_scope:Person.PhoneNumber)
)),
DESCRIPTOR = _PERSON,
__module__ = 'person_pb2'
# @@protoc_insertion_point(class_scope:Person)
))
_PERSON = _descriptor.Descriptor(
name='Person',
full_name='Person',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='Person.name', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, options=None),
from person_pb2 import Person
person = Person()
person.id = 1
person.name = "Vasya Pupkin"
person.email = "vasya@example.com"
phone = person.phones.add()
phone.number = "+7 499 270-27-27"
phone.type = Person.HOME
>>> person
name: "Vasya Pupkin"
id: 1234
email: "vasya@example.com"
phones {
number: "+7 499 270-27-27"
type: HOME
}
phones {
number: "2702727"
type: WORK
}
>>> data = person.SerializeToString()
>>> data
b'nx0cVasya
Pupkinx10xd2tx1ax11vasya@example.com"x14nx10
+7 499 270-27-27x10x01"x0bnx072702727x10x02'
>>> person = Person.FromString(data)
>>> person = Person()
>>> person.ParseFromString(data)
Any
import "google/protobuf/any.proto";
message ErrorStatus {
string message = 1;
repeated google.protobuf.Any details = 2;
}
OneOf
message SampleMessage {
oneof test_oneof {
string name = 4;
SubMessage sub_message = 9;
}
}
Map
map<string, uint32> projects = 5;
>>> person.projects['one'] = 1
>>> person
projects {
key: "one"
value: 1
}
>>> person.projects['one']
1
Library
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
message MyMessage {
google.protobuf.Timestamp my_field = 1;
}
service Foo {
rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
}
JSON Mapping
>>> from google.protobuf.json_format import MessageToJson
>>> json_string = MessageToJson(person)
>>> json_string
'{n "name": "Vasya Pupkin",n "email":
"vasya@example.com",n "phones": [n {n "number":
"+7 499 270-27-27",n "type": "HOME"n },n {n
"number": "2702727",n "type": "WORK"n }n ],n "id":
1234n}'
>>> from google.protobuf.json_format import Parse
>>> person = Person()
>>> Parse(json_string, person)
>>> person
name: "Vasya Pupkin"
id: 1234
email: "vasya@example.com"
...
Unknown Fields
message Foo {
reserved 2, 15, 9 to 11;
reserved "foo", "bar";
}
RPC
service SearchService {
rpc Search (SearchRequest) returns (SearchResponse);
}
gRPC
● Быстрый
● Компактный
● Позволяет формализовать данные
● Бинарный
● Лаконичный
● Поддерживается всеми распространенными
языками
● Позволяет обеспечить совместимость со
Ссылки
https://github.com/google/protobuf
https://developers.google.com/protocol-buffers
http://www.computerworld.com/article/2513433/app-development/twitter-solves-
its-data-formatting-challenge.html
Спасибо за внимание!
Вопросы?

Weitere ähnliche Inhalte

Ähnlich wie Protobuf it!

Sec.1 กล ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปร
Sec.1 กล  ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปรSec.1 กล  ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปร
Sec.1 กล ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปรBongza Naruk
 
Semantic web support for POSH
Semantic web support for POSHSemantic web support for POSH
Semantic web support for POSHDinu Suman
 
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...Ayes Chinmay
 
Pythonlearn-13-WebServices.pptx
Pythonlearn-13-WebServices.pptxPythonlearn-13-WebServices.pptx
Pythonlearn-13-WebServices.pptxnishant874609
 
GTR-Python-Using Web Services notesgtr.ppt
GTR-Python-Using Web Services notesgtr.pptGTR-Python-Using Web Services notesgtr.ppt
GTR-Python-Using Web Services notesgtr.pptrajugt3
 
Spring Web Service, Spring Integration and Spring Batch
Spring Web Service, Spring Integration and Spring BatchSpring Web Service, Spring Integration and Spring Batch
Spring Web Service, Spring Integration and Spring BatchEberhard Wolff
 
ScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersKazuhiro Sera
 
Xsd Basics R&D with ORACLE SOA
Xsd Basics R&D with ORACLE SOAXsd Basics R&D with ORACLE SOA
Xsd Basics R&D with ORACLE SOAprathap kumar
 
Linked open data sandwich
Linked open data sandwichLinked open data sandwich
Linked open data sandwichThimo Thoeye
 
Attacks against Microsoft network web clients
Attacks against Microsoft network web clients Attacks against Microsoft network web clients
Attacks against Microsoft network web clients Positive Hack Days
 
Microdata semantic-extend
Microdata semantic-extendMicrodata semantic-extend
Microdata semantic-extendSeek Tan
 

Ähnlich wie Protobuf it! (20)

Schemas and soap_prt
Schemas and soap_prtSchemas and soap_prt
Schemas and soap_prt
 
Os Pruett
Os PruettOs Pruett
Os Pruett
 
Sec.1 กล ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปร
Sec.1 กล  ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปรSec.1 กล  ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปร
Sec.1 กล ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปร
 
Semantic web support for POSH
Semantic web support for POSHSemantic web support for POSH
Semantic web support for POSH
 
HTML5
HTML5HTML5
HTML5
 
RCEC Email 3.5.03
RCEC Email 3.5.03RCEC Email 3.5.03
RCEC Email 3.5.03
 
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
Internet and Web Technology (CLASS-8) [jQuery and JSON] | NIC/NIELIT Web Tech...
 
Pythonlearn-13-WebServices.pptx
Pythonlearn-13-WebServices.pptxPythonlearn-13-WebServices.pptx
Pythonlearn-13-WebServices.pptx
 
Html5 intro
Html5 introHtml5 intro
Html5 intro
 
Ws rest
Ws restWs rest
Ws rest
 
course js day 3
course js day 3course js day 3
course js day 3
 
GTR-Python-Using Web Services notesgtr.ppt
GTR-Python-Using Web Services notesgtr.pptGTR-Python-Using Web Services notesgtr.ppt
GTR-Python-Using Web Services notesgtr.ppt
 
Spring Web Service, Spring Integration and Spring Batch
Spring Web Service, Spring Integration and Spring BatchSpring Web Service, Spring Integration and Spring Batch
Spring Web Service, Spring Integration and Spring Batch
 
ScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for Beginners
 
Xsd Basics R&D with ORACLE SOA
Xsd Basics R&D with ORACLE SOAXsd Basics R&D with ORACLE SOA
Xsd Basics R&D with ORACLE SOA
 
Xsd basics
Xsd basicsXsd basics
Xsd basics
 
Introduction to Html5
Introduction to Html5Introduction to Html5
Introduction to Html5
 
Linked open data sandwich
Linked open data sandwichLinked open data sandwich
Linked open data sandwich
 
Attacks against Microsoft network web clients
Attacks against Microsoft network web clients Attacks against Microsoft network web clients
Attacks against Microsoft network web clients
 
Microdata semantic-extend
Microdata semantic-extendMicrodata semantic-extend
Microdata semantic-extend
 

Kürzlich hochgeladen

%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 

Kürzlich hochgeladen (20)

%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 

Protobuf it!

Hinweis der Redaktion

  1. Вопрос сериализации и десериализации возникает практически в любом проекте. Зачастую можно обойтись и самописными инструментами. Но особо остро он встает при разработке систем состоящих из множества компонентов, написанных еще и на разных языках и разнесенных физически.
  2. Здесь можно увидеть такой пример. Отдельные части системы как-то обмениваются данными, и эти данные должны быть хорошо понимаемы всеми. Также сериализация важна для хранения данных.
  3. Решением проблем сериализации в ключе межъязыкового, межплатформенного и кроссплатформенного общения занимался и W3C. Консорциум всемирной паутины - этот консорциум был создан в 1994 году. Как консультативный орган для лидеров мировой компьютерной индустрии с целью обеспечения совместимости своих продуктов и разработки новых технологический стандартов. Стандартизация HTML - их первый крупный успех (в 1996 году).
  4. Здесь можно видеть список стандартов, утвержденных консорциумом. Здесь очень много важных стандартов.
  5. И конечно же всеми любимый XML. Здесь даже присутствует как минимум один человек, который его любит настолько, что даже ездил на XML конференцию!
  6. Вот пример этого удивительного языка, а вернее пример XSD (XML Schema Definition) - языка описания структуры XML-документов. Правда он прекрасен?
  7. Вообще экосистема XML внушительна. Это целый огромный мир. Он решал множество вопросов, в том числе и проблему сериализации и десериализации данных. Кто из вас знаком с XML и приходилось использовать или активно использует сейчас? Кому он нравится? А кому нет?
  8. Но видимо не все были от него в восторге. В их числе ребята из компании ныне уже несуществующей… под прежним названием. И что же они сделали? Независимый от языка и платформы, масштабируемый язык для сериализации структурированных данных, как, и, собственно,
  9. XML, только как они сами заявляют, он компактнее, быстрее и проще. Еще они его описывают как гибкий, эффективны, автоматизированный механизм сериализации.
  10. И имя ему - Protocol Buffers, или просто Protobuf. По замыслу разработчиков вы описываете свою структуру данных, компилируете в классы нужного вам языка и используете высокоуровневое представление. При этом закладывается, что новые версии ваших структур не будут ломать код, работающий со старыми версиями.
  11. Protobuf поддерживает множество языков программирования. Для каждого можно найти инструкцию по установке и использованию под различные платформы. Здесь языки, которые они заявляют у себя на гите, там же есть отдельная страничка с огромным количеством третьесторонних реализаций под эти и другие различные языки. Он был создан в 2008 году.
  12. И уже в 2010 году компания Twitter перешла на protobuf для хранения данных, отбросив XML, JSON и CSV. Под XML триллион петабайт твитов у них превращался в 10 триллионов петабайт. JSON тоже не был достаточно компактным, поскольку хранит заголовки. CSV отбросили из-за проблем обратной совместимости со старыми версиями данных, после изменения структуры.
  13. По заявлениям самих же разработчиков google protobuf от 3 до 10 раз меньше XML и от 20 до 100 раз быстрее.
  14. Как это работает? Вы описываете структуру в .proto-файле, пример которого вы можете видеть на экране. Это пример описания некой личности (взятый с сайта разработчика). Здесь message - некая базовая логическая сущность, содержащая пары ключ-значение. Т.е. мы описываем базовые параметры, указывая обязательное оно, опциональное или может быть несколько. Указываем тип и имя поля + последовательность. Это важно для сериализации в бинарный формат и последующей десериализации. Можно создавать свои внутренние типы через message, как тут показано на примере с PhoneNumber. Можно создавать перечисления для задания множества возможных значений у атрибутов. Указывать возможные значения по умолчанию. Но это вторая версия protobuf, сейчас актуальна третья и она стала еще лаконичнее.
  15. Теперь все поля опциональны. Значения по умолчанию строго регламентированы и для перечислений это значение с нулевым идентификатором.
  16. Для компиляции используется специальная программа protoc. Выполняем её в командной строке с указанием путей и получаем python модуль со статическим дескриптором для каждого типа сообщения в .proto файле, каждый из которых потом в рантайме через метаклассы генерится в python классы. Вообще если в .proto файле будет только та информация , то приведена на предыдущем слайде, то этого уже достаточно,чтобы скомпилировать рабочий код. Но будет выведено предупреждение, что не указана версия протокола в самом proto файле, и по умолчанию будет использоваться proto2. Поэтому в начале файла указываем syntax=”proto3”;
  17. Здесь можно видеть часть того, что в итоге генерится. С помощью метакласса GeneratedProtocolMessageType на основе дескрипторов создаются нужные классы.
  18. Собственно сам дескриптор, не полностью. Здесь name и full_name, но если задать namespace .proto файле, что, собственно делать нужно, то full_name дополнится на этот namespace. Там много еще чего есть, файл на почти 170 строк. Но не будем вдаваться в детали, я привел лишь для общего представления, c чем придется иметь дело.
  19. Ну и поехали. Импортируем класс, создаем экземпляр и заполняем. Множественные элементы добавляем через add. Значения заданные в перечисления попадают непосредственно в атрибуты класса, в котором задано перечисление. Если хотим задавать через Person.PhoneType.HOME, то придется обернуть перечисление в одноименное сообщение.
  20. Можно посмотреть что получилось - очень читаемый вывод.
  21. Механизм сериализации/десериализации достаточно прост и быстр.
  22. Что еще позволяет делать protobuf, помимо того. что есть в примере. Есть возможность указать для поля, что оно может быть произвольного типа
  23. Ограничение на использование только одного поля из нескольких возможных. Можно использовать поля разных типов, но не множественные
  24. Есть так же набор составных типов в стандартной библиотеки. Импорты
  25. Новая версия данных. Расширение. Совместимость у старых версий. Игнорирование старых полей