tl; dr :是否可以使用endpoints-proto-datastore从POST接收包含对象的列表并将其插入db?
在示例之后,在构建我的API时,我没有得到如何让用户POST一个对象列表,以便我可以更高效地使用ndb.put_multi
在数据库中放入一堆数据,例如。
在endpoints_proto_datastore.ndb.model的评论中我想象它的设计方式是不可能的。我是对的还是我错过了什么?
扩展the sample provided by endpoints达到了所需的目标:
class Greeting(messages.Message):
message = messages.StringField(1)
class GreetingCollection(messages.Message):
items = messages.MessageField(Greeting, 1, repeated=True)
# then inside the endpoints.api class
@endpoints.method(GreetingCollection, GreetingCollection,
path='hellogretting', http_method='POST',
name='greetings.postGreeting')
def greetings_post(self, request):
result = [item for item in request.items]
return GreetingCollection(items=result)
- 编辑 -
答案 0 :(得分:3)
请参阅有关POST
数据存储的docs,您唯一的问题是您的模型不是EndpointsModel
。而是为Greeting
和GreetingCollection
:
from endpoints_proto_datastore.ndb import EndpointsModel
class Greeting(EndpointsModel):
message = ndb.StringProperty()
class GreetingCollection(EndpointsModel):
items = ndb.StructuredProperty(Greeting, repeated=True)
完成此操作后,您可以使用
class MyApi(remote.Service):
# ...
@GreetingCollection.method(path='hellogretting', http_method='POST',
name='greetings.postGreeting')
def greetings_post(self, my_collection):
ndb.put_multi(my_collection.items)
return my_collection