рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореБрдЭреЗ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднрд╛рд╖рд╛ (IDL) рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛, рдЬреЛ рдХрд┐ рдкреНрд░реЛрдЯреЛрдмреБрдлрд╝ рдпрд╛ рдереНрд░рд┐рдлреНрдЯ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реЛрдЧрд╛ред рдореИрдВ рд▓рдЧрднрдЧ рддреАрди рдорд╣реАрдиреЗ рдореЗрдВ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИред
Pdef (рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдбреЗрдлрд┐рдирд┐рд╢рди рд▓реИрдВрдЧреНрд╡реЗрдЬ) рдПрдХ
рд╕реНрдЯреЗрдЯрд╕ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╣реИ рдЬреЛ JSON рдФрд░ HTTP RPC рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред Pidef рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ, рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ, рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдбреЗрдЯрд╛, рдХреИрд╢ рдФрд░ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВред
рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛:
- рд╕рдВрдХреБрд▓, рдореЙрдбреНрдпреВрд▓ рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреА рд╡рд┐рдХрд╕рд┐рдд рдкреНрд░рдгрд╛рд▓реАред
- рдкрд░рд┐рдкрддреНрд░ рдЖрдпрд╛рдд рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде)ред
- рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдкреГрдердХреНрдХрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реАред
- рд╕рдВрджреЗрд╢ (рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдирд╛рд▓реЙрдЧ) рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рд╡рд┐рд░рд╛рд╕рддред
- рдХреЙрд▓ рдЪреЗрди рд╕рдкреЛрд░реНрдЯ, рдЬреИрд╕реЗ
github.user(1).repos().all()
ред - JSON рдбреЗрдЯрд╛ рд╕реНрд╡рд░реВрдк рдФрд░ HTTP RPC рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдПред
- рдЕрдиреНрдп рдкреНрд░рд╛рд░реВрдкреЛрдВ рдФрд░ рдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
- рдкреНрд▓рдЧ-рдЗрди рдХреЛрдб рдЬрдирд░реЗрдЯрд░ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЬрд╛рд╡рд╛ , рдкрд╛рдпрдерди рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд)ред
- рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЛрдб рдкреАрдврд╝реА, рдЕрд░реНрдерд╛рдд Pidef рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдФрд░ рд╣рд╛рде рд╕реЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрдкрдХреЛ Pidef рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╢реНрд░рдо рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдФрд░ рдЧреНрд░рд╛рд╣рдХ-рд╕рд░реНрд╡рд░, рд╕реЗрд╡рд╛-рдЙрдиреНрдореБрдЦ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХреЛрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕рдорд░реНрдерди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рд╡рд┐рд╡рд░рдг рдХреЛ рднреА рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд▓рдВрдмрд╡рдд рдПрдХреАрдХреГрдд рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрдЯрдХреЛрдВ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрджреЗрд╢ рд╡рд░реНрдгрди рдЙрджрд╛рд╣рд░рдг:
message Human { id int64; name string; birthday datetime; sex Sex; continent ContinentName; }
рдЙрдкрдпреЛрдЧ рдХреЗ
рдЙрджрд╛рд╣рд░рдг (
рдЙрддреНрдкрдиреНрди рдХреЛрдб рдЙрджрд╛рд╣рд░рдг ):
Json { "id": 1, "name": "Ivan Korobkov", "birthday": "1987-08-07T00:00Z", "sex": "male", "continent": "europe" }
рдЬрд╛рд╡рд╛ Human human = new Human() .setId(1) .setName("John") .setSex(Sex.MALE) .setContinent(ContinentName.ASIA) String json = human.toJson(); Human another = Human.fromJson(json);
рдЕрдЬрдЧрд░ human = Human(id=1, name="John") human.birthday = datetime.datetime(1900, 1, 2) s = human.to_json() another = Human.from_json(s)
рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА Human *human = [[Human alloc]init]; human.id = 1; human.name = @"John"; human.sex = Sex_MALE; human.continent = ContinentName_EUROPE; NSError *error = nil; NSData *data = [human toJsonError:&error]; Human *another = [Human messageWithData:data error:&error];
рд╕реНрдерд╛рдкрдирд╛
Pidef рдореЗрдВ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░, рдкреНрд▓рдЧ-рдЗрди рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рдХ рдФрд░ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред
рд╕рдВрдХрд▓рдХ рдХреЛ
PyPI рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ
PyPI рдХреЗ рд╕рд╛рде
рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ :
pip install pdef-compiler
рдпрд╛ рдЖрдк
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдкреГрд╖реНрда рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЕрдирдЬрд╝рд┐рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
python setup.py install
рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ (рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдкрдиреНрдиреЛрдВ рдкрд░ рд╣реИрдВ):
pip install pdef-java pip install pdef-python pip install pdef-objc
рд╕рдм рдХреБрдЫ, рд╕рдВрдХрд▓рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рдирдореВрдирд╛ рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдЧреА рдФрд░ рдЙрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧреАред
pdefc -v check https://raw.github.com/pdef/pdef/master/example/world.yaml
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдорджрдж рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
pdefc -h ... generate-python Python code generator. generate-objc Objective-C code generator. generate-java Java code generator. pdefc generate-python -h
рдХреЗ рдЙрдкрдпреЛрдЧ
рдкреИрдХреЗрдЬ рдлрд╝рд╛рдЗрд▓
myproject.yaml
рдмрдирд╛рдПрдБ:
package: name: myproject modules: - posts - photos
рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдБ:
// posts.pdef namespace myproject; import myproject.photos; interface Posts { get(id int64) Post; @post create(title string @post, text string @post) Post; } message Post { id int64; title string; text string; photos list<Photo>; }
// photos.pdef namespace myproject; message Photo { id int64; url string; }
рдХреЛрдб рдкреАрдврд╝реА рдЪрд▓рд╛рдПрдВ:
pdefc generate-java myproject.yaml --out generated-java/ pdefc generate-python myproject.yaml --out generated-python/ pdefc generate-objc myproject.yaml --out generated-objc/
рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП Pidef рдореЙрдбреНрдпреВрд▓ рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреА рдореИрдкрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
Pidef рдЧрд╛рдЗрдб 1.1
рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕
Pidef рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ Java / C ++ рдХреЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рдлрд╝реАрд▓реНрдб / рддрд░реНрдХ рдХрд╛ рдЙрд▓рдЯрд╛ рдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд▓реИрдЯрд┐рди рдЪрд░рд┐рддреНрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рд▓реИрдЯрд┐рди рд╡рд░реНрдг, рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╡реНрдпрд╛рдХрд░рдг рд╡рд┐рд╡рд░рдг (BNF)ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
namespace example; interface MyInterface { method( arg0 int32, arg1 string ) list<string>; } message MyMessage { field0 int32; field1 string; } enum Number { ONE, TWO; }
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВ: рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХрд▓-рд░реЗрдЦрд╛ рдФрд░ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдореЙрдбреНрдпреВрд▓ рдХреА рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЯрд╛рдЗрдк рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ (рд╕рдВрджреЗрд╢, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдЧрдгрдирд╛) рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
namespace example; // This is a one line comment, it is stripped from the source code. interface ExampleInterface { hello(name string) string; }
рдкреИрдХреЗрдЬ рдФрд░ рдореЙрдбреНрдпреВрд▓
рд╕рдВрдХреБрд▓
Pidef рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХреБрд▓ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ рдХреЛ рдПрдХ
yaml
рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред рд╕рдВрдХреБрд▓ рдХреЗ рдмреАрдЪ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИред рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдореИрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрдХ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд┐рднрд╛рдЬрдХ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░
.pdef
рдПрдХреНрд╕рдЯреЗрдВрд╢рди
.pdef
рдЬрд╛рддрд╛
.pdef
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
users.events
users/events.pdef
рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдкреИрдХреЗрдЬ рдХреЗ рдирд╛рдо рдФрд░ рдПрдХ рд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА
yaml
рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрде рдХреЛ
yaml
рд╣реИрдВред рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рд░реНрднрд░рддрд╛ рдкрдереЛрдВ рдХреЛ рд╕реЗрдЯ рдФрд░ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдкреИрдХреЗрдЬ рдлрд╝рд╛рдЗрд▓:
package: # Package name name: example # Additional information version: 1.1 url: https://github.com/pdef/pdef/ author: Ivan Korobkov <ivan.korobkov@gmail.com> description: Example application # Module files. modules: - example - photos - users - users.profile # Other packages this package depends on. dependencies: - common - pdef_test https://raw.github.com/pdef/pdef/1.1/test/test.yaml
рдФрд░ рдЗрд╕рдХреА рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ (
api
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ):
api/ example.yaml example.pdef photos.pdef users.pdef users/profile.pdef
рдореЙрдбреНрдпреВрд▓ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди
рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕рдВрджреЗрд╢, рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЧрдгрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ
*.pdef
рдлрд╝рд╛рдЗрд▓ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╣реА рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рднрд┐рдиреНрди рдкреИрдХреЗрдЬ рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Pidefa рдореЗрдВ рдирд╛рдорд╕реНрдерд╛рди рдЬрд╛рд╡рд╛ / C # / C ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд╣реИрдВ, рдФрд░ рдпрд╣ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдкреИрдХреЗрдЬ рдПрдХ рд╣реА рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрднрд╛рд╡рд┐рдд рдЙрджрд╛рд╣рд░рдг:
twitter
,
github
рдЖрджрд┐ред
namespace myproject; message Hello { text string; }
рдЖрдпрд╛рдд
рдЖрдпрд╛рдд рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ
include
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ, рд╡реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рджреВрд╕рд░реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкреНрд░рдХрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓
.pdef
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛ рдкреИрдХреЗрдЬ рдирд╛рдо рдФрд░ рдлрд╝рд╛рдЗрд▓ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдбреЙрдЯ рдХреЗ рд╕рд╛рдеред рдЬрдм рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдкреИрдХреЗрдЬ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рдкреИрдХреЗрдЬ рдирд╛рдо рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЖрдпрд╛рдд:
namespace example; import package; // Equivalent to "import package.package" when package/module names match. import package.module;
рдмреИрдЪ рдЖрдпрд╛рдд:
namespace example; from package.module import submodule0, submodule1;
рд▓реВрдк рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрднрд░рддрд╛
рд▓реВрдк рдЖрдпрд╛рдд рддрдм рддрдХ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рджреВрд╕рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЕрдиреНрдпрдерд╛, рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рд░реВрдмреА рдпрд╛ рдкрд╛рдпрдерди рдЬреИрд╕реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Pidef рд╕рдВрдХрд▓рдХ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рджреМрд░рд╛рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреЗрдбрд╝-рдЬреИрд╕рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдХреНрд░рдо рд╣реЛрдЧрд╛, рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк
Pdef рдЬрдирд░реЗрдЯ рдФрд░ рднрд╛рд╖рд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд░рд┐рдкрддреНрд░ рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
// users.pdef namespace example; from example import photos; // Circular import. message User { bestFriend User; // References a declaring type. photo Photo; // References a type from another module. }
// photos.pdef namespace example; from example import users; // Circular import. message Photo { user User; // References a user from another module. }
рдирд╛рдо рдХрд╛ рд╕рдВрдХрд▓реНрдк
рдПрдХ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рднреАрддрд░, рдПрдХ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
MyMessage
, рдЬрдмрдХрд┐ рдПрдХ рдЕрд▓рдЧ
namespace.MyMessag
рднреАрддрд░
namespace.MyMessag
рдкреВрд░рд╛ рдирд╛рдо
namespace.MyMessag
ред
MyMessage
namespace.MyMessag
ред
рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА
Pidef рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдереИрддрд┐рдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╣реИред
рд╢реВрдиреНрдп
void
рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд▓реМрдЯрд╛рддреА рд╣реИред
рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░
bool
: рдмреВрд▓рд┐рдпрди рдорд╛рди (рд╕рд╣реА / рдЧрд▓рдд)int16
: 16-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдПint32
: 32-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдПint64
: 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдПfloat
: 32-рдмрд┐рдЯ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░double
: 64-рдмрд┐рдЯ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░string
: рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧdatetime
: рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд┐рдирд╛ рд╕рдордп рдореЗрдВ рддрд╛рд░реАрдЦ
рдХрдВрдЯреЗрдирд░
list
: рдПрдХ рдЖрджреЗрд╢рд┐рдд рд╕реВрдЪреА рдЬрд┐рд╕рдХреЗ рддрддреНрд╡ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВредset
: рдЕрджреНрд╡рд┐рддреАрдп рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реЗрдЯ рдЬрд┐рд╕рдХрд╛ рддрддреНрд╡ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИредmap
: рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдХрдВрдЯреЗрдирд░, рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдорд╛рди рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
message Containers { numbers list<int32>; tweets list<Tweet>; ids set<int64>; colors set<Color>; userNames map<int64, string>; photos map<string, list<Photo>>; }
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
рдПрдХ рдПрдиреНрдпреВрдорд░реЗрд╢рди рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рднреЗрджрдХреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
enum Sex { MALE, FEMALE; } enum EventType { USER_REGISTERED, USER_BANNED, PHOTO_UPLOADED, PHOTO_DELETED, MESSAGE_RECEIVED; }
рд╕рдВрджреЗрд╢ рдФрд░ рдЕрдкрд╡рд╛рдж
рдПрдХ рд╕рдВрджреЗрд╢ (рдПрдирд╛рд▓реЙрдЧ рдЯреВ
struct
'рдП) рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рд╕рдВрджреЗрд╢ рд╕рд░рд▓ рдФрд░ рдмрд╣реБрд░реВрдкреА рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдкрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╕рднреА рд╕рдВрджреЗрд╢ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
- рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдлрд╝реАрд▓реНрдб рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕реНрд╡-рд╕рдВрджрд░реНрднрд┐рдд)ред
message User { id int64; name string; age int32; profile Profile; friends set<User>; // Self-referencing. } exception UserNotFound { userId int64; }
рд╡рд┐рд░рд╛рд╕рдд
рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдПрдХ рд╕рдВрджреЗрд╢ рдХреЛ рджреВрд╕рд░реЗ рд╕рдВрджреЗрд╢ рдпрд╛ рдЕрдкрд╡рд╛рдж рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ, рд╡рдВрд╢рдЬ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрд░реВрдкрддрд╛ рд╡рд┐рд░рд╛рд╕рдд рд╣реИред
- рдЪрдХреНрд░реАрдп рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдирд┐рд╖рд┐рджреНрдз рд╣реИред
- рдПрдХ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- рд╡рдВрд╢ рдореЗрдВ рдЦреЗрддреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИред
- рд╡рдВрд╢рдЬ рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдпрд╛ рддреЛ рд╕рдВрджреЗрд╢ рдпрд╛ рдЕрдкрд╡рд╛рдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддреНред рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред
- рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдЕрдкрдиреЗ рд╡рдВрд╢рдЬреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рднреА рдирд┐рд░реНрднрд░ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЪрдХреНрд░реАрдп рдЖрдпрд╛рдд рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг)ред
рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдЙрджрд╛рд╣рд░рдг:
message EditableUser { name string; sex Sex; birthday datetime; } message User : EditableUser { id int32; lastSeen datetime; friendsCount int32; likesCount int32; photosCount int32; } message UserWithDetails : User { photos list<Photo>; friends list<User>; }
рдмрд╣реБрд░реВрдкрддрд╛ рд╡рд┐рд░рд╛рд╕рдд
рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдЖрдкрдХреЛ рдбрд┐рд╕реНрдХреНрд░рд┐рдорд┐рдиреЗрдЯрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рдВрд╢ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрднрд┐рднрд╛рд╡рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╡реГрдХреНрд╖ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╡рдВрд╢рдЬ рджреВрд╕рд░реЗ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рди рдХреЗрд╡рд▓ рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛), рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдЙрд╕реА рдкреЗрдбрд╝ рдХреЗ рднреАрддрд░ред
рдмрд╣реБрд░реВрдкрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:
- рдПрдХ рдЧрдгрдирд╛ рдмрдирд╛рдПрдВ рдЬреЛ рд╡рд┐рднреЗрджрдХ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
- рдореВрд▓ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЧрдгрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ
@discriminator
рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред message Subtype : Base(DiscriminatorEnum.VALUE)
рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рдВрд╢ рдХреЗ рд╡рд┐рднреЗрджрдХ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ message Subtype : Base(DiscriminatorEnum.VALUE)
ред
рдкреНрд░рддрд┐рдмрдВрдз:
- рдореВрд▓ рдФрд░ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдПрдХ рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд╡рд┐рд╡реЗрдЪрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрд╢реНрд░рд┐рдд рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдПрдХрд▓ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╡реГрдХреНрд╖ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рднреЗрджрдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- рдЖрдк рд╡рд┐рд╡реЗрдЪрдХ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдмрд╣реБрд░реВрдкрд┐рдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдмрд╣реБрд░реВрдкрддрд╛ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
/** Discriminator enum. */ enum EventType { USER_EVENT, USER_REGISTERED, USER_BANNED, PHOTO_UPLOADED, } /** Base event with a discriminator field. */ message Event { type EventType @discriminator; // The type field marked as @discriminator time datetime; } /** Base user event. */ message UserEvent : Event(EventType.USER_EVENT) { user User; } message UserRegistered : UserEvent(EventType.USER_REGISTERED) { ip string; browser string; device string; } message UserBanned : UserEvent(EventType.USER_BANNED) { moderatorId int64; reason string; } message PhotoUploaded : Event(EventType.PHOTO_UPLOADED) { photo Photo; userId int64; }
рдЗрдВрдЯрд░рдлреЗрд╕
рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрдЯреИрдЯрд┐рдХрд▓реА рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рддрд░реНрдХ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдХрд┐рд╕реА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдпрд╛
void
рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ
рдЯрд░реНрдорд┐рдирд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛
рд╣реИ рдЬрдм рд╡рд╣ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
app.users().register("John Doe")
ред
рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ
@post
рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ
@post
рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред HTTP RPC рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░
@post
рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рддрд░реНрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
@post
рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ
@query
рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рдЬреЛ HTTP рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
- рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
- рддрд░реНрдХ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
- рддрд░реНрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдХреЗрд╡рд▓ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ
@post
рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред - рдХреЗрд╡рд▓ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ
@post
рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ @post
рддрд░реНрдХред - рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐ рдЯрд░реНрдорд┐рдирд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрджрд╛рд╣рд░рдг:
interface Application { void0() void; service(arg int32) Service; method(arg0 int32, arg1 string, arg2 list<string>) string; } interface Service { query(limit int32 @query, offset int32 @query) list<string>; @post mutator(arg0 int32, postArg string @post) string; }
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо
рдЗрдВрдЯрд░рдлреЗрд╕ рдЕрдиреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ рдирд┐рд╖рд┐рджреНрдз рд╣реИрдВред
- рдПрдХ рд╡рд╛рд░рд┐рд╕ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- рдпрджрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд╡рд╛рдж рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдпрд╛ рддреЛ рдЕрдкрд╡рд╛рдж рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдЙрджрд╛рд╣рд░рдг:
interface BaseInterface { method() void; } interface SubInterface : BaseInterface { anotherMethod() void; }
рдЕрдкрд╡рд╛рдж
рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ
@throws(Exception)
рдЗрдВрдЯрд░рдлрд╝реЗрд╕
@throws(Exception)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реВрдЯ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░реВрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рднреА рдХреЙрд▓ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЕрдиреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╣реБрд░реВрдкрддрд╛ рд╡рд┐рд░рд╛рд╕рдд рдпрд╛ рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд░реВрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Github
рдпрд╛
Twitter
рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рджред
рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрд░реВрдкреА рдЕрдкрд╡рд╛рдж:
@throws(AppException) interface Application { users() Users; photos() Photos; search() Search; } enum AppExceptionCode { AUTH_EXC, VALIDATION_EXC, FORBIDDEN_EXC } exception AppException { type AppExceptionCode @discriminator; } exception AuthExc : AppException(AppExceptionCode.AUTH_EXC) {} exception ValidationExc : AppException(AppExceptionCode.VALIDATION_EXC) {} exception ForbiddenExc : AppException(AppExceptionCode.FORBIDDEN_EXC) {}
рдирд┐рд╖реНрдХрд░реНрд╖
рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдбреНрд░рд╛рдлреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХреЗ рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рдХрд╣реАрдВ рддреИрдпрд╛рд░ рдерд╛ред рд╡рд░реНрд╖ рдХреЗ рдмрд╛рдХреА рд╕рдордп рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓, рдЕрд╕реНрдкрд╖реНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рднрд╛рд╖рд╛ рдХреЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрдИ рд╡рд┐рднреЗрджрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЗрдиреЗрд░рд┐рдХ, рдмрд╣реБрд░реВрдкреА рд╡рд┐рд░рд╛рд╕рдд рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереА, рдХреЙрд▓ рдЪреЗрдиреНрд╕ рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдУрдкрди рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо (рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореВрд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
native mytype
), рдХрдордЬреЛрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ (рдЬрдм рд╡рд┐рдзрд┐ рдХрд╛ рдлрд╝реАрд▓реНрдб рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░
object
, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ) рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЕрдирдкреИрдХ рдХрд░рдирд╛ рдкрдбрд╝рд╛), рд╕рд╛рде рд╣реА рд╕рд╛рде рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓, рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рднрд╛рд╖рд╛ рд╣реИред
REST рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ? рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЗрд╕рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрдордХреАрд▓реА рдереА, рдЗрд╕рд▓рд┐рдП REST рдХреЛ HTTPрдкреАрд╕реА рдХреЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ RPC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рдВрдХ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реИрдВред
рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд▓реЗрдЦрдХ рдирд╣реАрдВред рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕рд╛рд▓ рдореЗрдВ, рдореИрдВрдиреЗ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЗрдВ рднреА рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдгред рдореБрдЭреЗ pidef рдкрд╕рдВрдж рд╣реИред рдпрд╣ рдШрдЯрдХреЛрдВ рдХреА рдХрдордЬреЛрд░ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдХреЗ рдирд┐рдпрдорд┐рдд рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдкреНрд░рдХрд╛рд░, рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ, рд╕рд╛рдЗрдЯреНрд╕, рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░, рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ, рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо, рдкреБрд╢ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░, рдХреНрд╡реАрдЬ, рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рд╕рд┐рд╕реНрдЯрдо рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░рддрд╛ рд╣реИред рд╡реЗ рд╕рднреА, рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╣реА рдЙрдкрд▓рдмреНрдз рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдХреЛрдИ рддрдХрдиреАрдХреА рд▓реЙрдХ-рдЗрди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рд╣реА JSON рдФрд░ HTTP рд╣реИред
рд╕рдВрджрд░реНрдн