рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдРрдк рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдпрд╛ рдРрдк рдЗрдВрдЬрди рдХреЗ рд╕рдмрд╕реЗ рдЕрдВрддрд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдкрдврд╝реЗрдВ!
рдЖрдо рдПрдкреАрдЖрдИ
рдЕрдВрддрддрдГ, рдкреНрд░рддреНрдпреЗрдХ API рдХреЙрд▓ 4 рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ: рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'datastore_v3' рдпрд╛ 'memcache'), рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'Get' рдпрд╛ 'RunQuery'), рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ ред рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░ рд╣реИрдВ , рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдЬреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ Google рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЬрдм API рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд░ рдЕрдиреБрд░реЛрдз рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рд╕реЗ рдмрдирддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд░ рдЦрд╛рд▓реА рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рд╕реЗ рднрд░ рдЬрд╛рддрд╛ рд╣реИред
рдПрдкреАрдЖрдИ рдХреЙрд▓ 'рдкреНрд░реЗрд╖рдг' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЪрд╛рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ, apiproxy_stub_map рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╕реЗрд╡рд╛ рдирд╛рдо рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ - рд╡рд░реНрдгрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ - рдФрд░ рд╕реНрдЯрдм рдЬреЛ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрд╕рдбреАрдХреЗ рдореЗрдВ, рдпрд╣ рдЕрдиреБрдкрд╛рд▓рди рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯрдмреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рджреНрд╡рд╛рд░рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдкреАрдЖрдИ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ред рдЙрддреНрдкрд╛рджрди рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдкрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЖрд╡реЗрджрди рдХреЛрдб рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реАред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рдХрднреА рднреА рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП; рд╡рд╣ рдирд╣реАрдВ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдХреЙрд▓ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдпрд╛ рдЗрд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рджреВрд╕рд░реА рдорд╢реАрди рдкрд░ рднреЗрдЬрд╛ рдЧрдпрд╛ред
рдЬреИрд╕реЗ рд╣реА рдбрд┐рд╕реНрдкреИрдЪ рдлрдВрдХреНрд╢рди рдХреЛ рддрдерд╛рдХрдерд┐рдд рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕реНрдЯрдм рдорд┐рд▓рд╛, рдпрд╣ рдПрдХ рдХреЙрд▓ рднреЗрдЬрддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдкреАрдЖрдИ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рддрдм рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╕рд░реНрд╡рд░ (рдПрд╕) рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреЙрд▓ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗрд╡рд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрд╡рд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддреА рд╣реИ, рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБ рдмрдирд╛рддреА рд╣реИ, рдЗрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рддреА рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЙрд╕ рд╕реНрдЯрдм рдкрд░ рднреЗрдЬрддреА рд╣реИ рдЬрд┐рд╕рдиреЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдерд╛ред рдЕрдВрдд рдореЗрдВ, рд╕реНрдЯрдм рдмрдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдореЗрдВ рдмрдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд░ рдкреНрд░рд╛рд░реВрдк рд╕рдВрдЪрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ "рдХрдВрдЯреЗрдирд░" рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рднрдВрдбрд╛рд░рдг рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдХреБрдВрдЬреА рдирд╛рдо рд╕реЗ рдПрдХ рдЗрдХрд╛рдИ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛:
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
from google.appengine.datastore import datastore_pb from google.appengine.api import apiproxy_stub_map def do_get(): request = datastore_pb.GetRequest() key = request.add_key() key.set_app(os.environ['APPLICATION_ID']) pathel = key.mutable_path().add_element() pathel.set_type('TestKind') pathel.set_name('test') response = datastore_pb.GetResponse() apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', request, response) return str(response)
рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рд╣реИ рдирд╛? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдорд╛рди рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдзрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ - TestKind.get_by_key_name ('рдкрд░реАрдХреНрд╖рдг')! рдЖрдкрдХреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкреВрд░реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛: рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдХрд╛рдИ рдХрд╛ рдирд╛рдо рдФрд░ рдкреНрд░рдореБрдЦ рдирд╛рдо) рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХреЛ рднрд░рдирд╛, рдлрд┐рд░ рдПрдХ рджреВрд░рд╕реНрде рдСрдмреНрдЬреЗрдХреНрдЯ (RPC) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП apiproxy_stub_map.MyncSyncCall рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ред рдЬрдм рдХреЙрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрддреНрддрд░ рдХреЛ рднрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбрд┐рд╕реНрдкреНрд▓реЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдЗрдХрд╛рдИ {
- рдЗрдХрд╛рдИ <
- рдХреБрдВрдЬреА <
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди: "рдЖрд╕реНрдердЧрд┐рдд"
- рдкрде <
- рддрддреНрд╡ {
- рдкреНрд░рдХрд╛рд░: "TestKind"
- рдирд╛рдо: "рдкрд░реАрдХреНрд╖рдг"
- }
- >
- >
- Unit_group <
- рддрддреНрд╡ {
- рдкреНрд░рдХрд╛рд░: "TestKind"
- рдирд╛рдо: "рдкрд░реАрдХреНрд╖рдг"
- }
- >
- рд╕рдВрдкрддреНрддрд┐ <
- рдирд╛рдо: "рдкрд░реАрдХреНрд╖рдг"
- рдорд╛рди <
- stringValue: "рдлреВ"
- >
- рдПрдХрд╛рдзрд┐рдХ: рдЕрд╕рддреНрдп
- >
- >
- }
рдкреНрд░рддреНрдпреЗрдХ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдореЛрдЯ рдХреЙрд▓ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕реЗрдЯ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╣реИред
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИ - рдЕрд░реНрдерд╛рдд, рд╣рдо рдЖрдЧреЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрдк рдЗрдВрдЬрди рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рд╕реНрдЯрдм рдкрд░ рдХреЙрд▓ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬреЛ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рдПрдХ рдЙрддреНрддрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдпрд╛ рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдХрд░реЗрдВ рдЬреЛ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдХреЗрд╡рд▓ рдХреБрдЫ рдПрдкреАрдЖрдИ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ URL рд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ , рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рд╡реЗрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд┐рдпрдорд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣ рд╣реА рд╣реИ - рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред Urlfetch рдЬреИрд╕реЗ API рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ APIs рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдВрддрд░ рдмреЛрд▓реНрдб рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
- google.appengine.datastore рд╕реЗ datastore_pb рдЖрдпрд╛рдд рдХрд░реЗрдВ
- google.appengine.api рдЖрдпрд╛рдд apiproxy_stub_map рд╕реЗ
- google.appengine.api рд╕реЗ рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдЖрдпрд╛рдд рдХрд░реЗрдВ
- def do_ async _get ():
- рдЕрдиреБрд░реЛрдз = datastore_pb.GetRequest ()
- рдХреБрдВрдЬреА = request.add_key ()
- key.set_app (os.environ ['APPLICATION_ID'])
- pathel = key.mutable_path ()ред add_element ()
- pathel.set_type ('TestKind')
- pathel.set_name ('рдкрд░реАрдХреНрд╖рдг')
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = datastore_pb.GetResponse ()
- rpc = datastore.CreateRPC ()
- rpc.make_call ('рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ', рдЕрдиреБрд░реЛрдз, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛)
- рд╡рд╛рдкрд╕реА rpc, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ RPC рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ MakeSyncCall () рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХреЗ make_call () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рдЬрдм рд╣рдордиреЗ рдЖрд░рдкреАрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ CreateRPC () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЙрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RPC рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА .check_success () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
- TestKind (key_name = 'test', test = 'foo'))ред Put ()
- self.response.headers ['рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░'] = 'рдкрд╛рда / рд╕рд╛рджрд╛'
- rpc, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = do_async_get ()
- self.response.out.write ("RPC рд╕реНрдерд┐рддрд┐% s \ n"% rpc.state рд╣реИ)
- rpc.check_success ()
- self.response.out.write ("RPC рд╕реНрдерд┐рддрд┐% s \ n"% rpc.state рд╣реИ)
- self.response.out.write (str (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛))
рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛:
- RPC рд╕реНрдерд┐рддрд┐ 1 рд╣реИ
- RPC рд╕реНрдерд┐рддрд┐ 2 рд╣реИ
- рдЗрдХрд╛рдИ {
- рдЗрдХрд╛рдИ <
- рдХреБрдВрдЬреА <
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди: "рдЖрд╕реНрдердЧрд┐рдд"
- рдкрде <
- рддрддреНрд╡ {
- рдкреНрд░рдХрд╛рд░: "TestKind"
- рдирд╛рдо: "рдкрд░реАрдХреНрд╖рдг"
- }
- >
- >
- Unit_group <
- рддрддреНрд╡ {
- рдкреНрд░рдХрд╛рд░: "TestKind"
- рдирд╛рдо: "рдкрд░реАрдХреНрд╖рдг"
- }
- >
- рд╕рдВрдкрддреНрддрд┐ <
- рдирд╛рдо: "рдкрд░реАрдХреНрд╖рдг"
- рдорд╛рди <
- stringValue: "рдлреВ"
- >
- рдПрдХрд╛рдзрд┐рдХ: рдЕрд╕рддреНрдп
- >
- >
- }
рд╕реНрдерд┐рддрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ google.appengine.api.apiproxy_rpc рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 1 рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЪрд▓ рд░рд╣рд╛ рд╣реИ", 2 рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╕рдорд╛рдкреНрдд", рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ RPC рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ! рдЗрд╕ рдХреНрд╡реЗрд░реА рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдЕрдм рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ RPC рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╣реБрдЖ рд╣реИред рдЯреНрд╡рд┐рд╕реНрдЯреЗрдб рдЬреИрд╕реЗ рдРрдк рдЗрдВрдЬрди рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рдирдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдХреМрди рд╣реЛрдЧрд╛?