презентация
.pdfЯЗЫК ОПИСАНИЯ ДАННЫХ
PROTOCOL BUFFERS
Подготовила: Студент группы ИСТ - 101, Васюра Анастасия
СОДЕРЖАНИЕ
•определение
•как это работает
•начало работы
•файл .proto
•пример использования
•преимущества и недостатки
ОПРЕДЕЛЕНИЕ
Protocol Buffers -метод сериализации структурированных данных в расширяемом формате, предложенный Google, как альтернатива XML и JSON.
! ! !
КАК ЭТО РАБОТАЕТ
.proto
Message |
Message |
Code
Generator
Compile &
Deploy
НАЧАЛО РАБОТЫ
Официально поддерживаемые языки: С++, Java, Python. От сторонних разработчиков:Action Script, C, C#, Common Lisp, Haskell, JavaScript, Lua, Matlab, Objective C, Perl, PHP, Ruby,Visual Basic, Delphi
Установочные пакеты под различные ОС code.google.com/p/protobuf/downloads/list
Установка пакета $ ./configure
$ make
$ make check
$ sudo make install
Создание системы классов
$ protoc --cpp_out=. addressbook.proto
ФАЙЛ PROTO
package tutorial; message Person {
required string name = 1; required uint32 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 AddressBook {
repeated Person person = 1;
}
ФАЙЛ PROTO
Модификаторы:
required - элемент обязательно присутствует в сообщении.
optional - элемент опционален. Может не присутствовать в сообщении.
repeated - элемент может повторяться в сообщении любое количество раз, включая ноль раз.
{
// Создаем и заполняем первую запись в адресной книге tutorial::Person * person = src_book.add_person(); person->set_name("Alexey Knyazev");
person->set_id(0); person->set_email("knzsoft@mail.ru");
{
tutorial::Person_PhoneNumber * pn = person->add_phone(); pn->set_number("+7 927-220-35-67"); pn->set_type(tutorial::Person_PhoneType_MOBILE);
}
{
tutorial::Person_PhoneNumber * pn = person->add_phone(); pn->set_number("+7 962-622-31-67"); pn->set_type(tutorial::Person_PhoneType_MOBILE);
}
}
{
// Создаем и заполняем вторую запись в адресной книге tutorial::Person * person = src_book.add_person(); person->set_name("Danilov Dmitry");
person->set_id(1);
{
tutorial::Person_PhoneNumber * pn = person->add_phone(); pn->set_number("8 (8452) 43-96-86"); pn->set_type(tutorial::Person_PhoneType_HOME);
}
}
std::string msg;
src_book.SerializeToString(&msg);
JSON
{
"persons":[
{
"Name":"Alexey Knyazev", "Id":0, "Email":"knzsoft@mail.ru", "Phone":[
{
"Number":"+7 927-220-35-67", "Type":0
},
{
"Number":"+7 962-622-31-67", "Type":2
}
]
},
{
"Name":"Danilov Dmitry", "Id":1,
"Email":null,
"Phone":[
{
"Number":"8 (8452) 43-96-86", "Type":1
}
]
}
]
}
XML
<?xml version="1.0" encoding="utf-8"?> <AdressBook >
<persons>
<Person>
<Name>Alexey Knyazev</Name> <Id>0</Id> <Email>knzsoft@mail.ru</Email> <Phone>
<PhoneNumber>
<Number>+7 927-220-35-67</Number> <Type>Mobile</Type>
</PhoneNumber>
<PhoneNumber>
<Number>+7 962-622-31-67</Number> <Type>Work</Type>
</PhoneNumber>
</Phone>
</Person>
<Person>
<Name>Danilov Dmitry</Name> <Id>1</Id>
<Phone>
<PhoneNumber>
<Number>8 (8452) 43-96-86</Number> <Type>Home</Type>
</PhoneNumber>
</Phone>
</Person>
</persons>
</AdressBook>