我想知道构建我将发送请求的主体的最佳方式,具体取决于传递的参数。
这是情景:
你可能首先建立一个像这样的身体:
data={
'user': user,
'password': password,
'somethingelse': somethingelse,
}
好的,那么这些就是要发布的必填字段。如果API调用有5-10个其他字段,您可以选择填充该怎么办?
如果我传入* args作为我的post函数,我可以将可选字段留空,并用args填充它们,但如果args为空,则总是会失败。有时,即使发布一个没有任何内容的可选字段,API仍会返回错误,因为它需要一个值。
更新 需要更多信息,所以让我试着解释一下。
我现在正在使用不同的REST API进行大量工作,而且我经常与自己讨论,我应该如何设计所有不同的POST / GET功能。
举个例子:
def search(self, query, ??):
"""
Executes a searchquery, that is then stored and needs
to be called again to get results, using the returned
search_id.
:param query: Query to be run with the search
:return: Array of the current searchid, which is needed
for other functions, and the content of HTTP response.
"""
search_id = int(round(time.time() * 1000))
if len(args) > 0:
response = self._post(
'/server/search', data={
'query': query,
'search_session_id': search_id,
'user_session_id': self.token,
})
在此示例中,start_time
和end_time
可以包含在此请求中,因为参数都是可选的,但如果使用它们都必须存在。
然后我想,我怎么设计这个,所以用户可以选择使用可选参数,或者决定保留默认值。
现在问题是,如果需要或要求,我将如何插入可选参数?我是否永远不会将关键参数存储在函数中,并始终在调用函数时解析所有键和值元素?有人会这么好,也许让我知道几种不同的方法来实现这个目标吗?
如果有人需要有关我的想法的更多信息,请告诉我。
答案 0 :(得分:0)
这个答案是由@Antti Haapala在python聊天室中提供的。
在帖子请求中保留静态数据本身很好,并且在请求中添加对请求中的关键字参数(** kwargs)的支持可以在python 2.7中通过合并数据然后将其发送到post请求之前的两种方式来完成像这样:
def search(self, query, **kwargs):
"""
Executes a searchquery, that is then stored and needs
to be called again to get results, using the returned
search_id.
:param query: Query to be run with the search
:return: Array of the current searchid, which is needed
for other functions, and the content of HTTP response.
"""
search_id = int(round(time.time() * 1000))
data ={
'query': query,
'search_session_id': search_id,
'user_session_id': self.token,
}
data.update(kwargs)
response = self._post('/server/search', data)
return search_id, response.json()
或者在添加** kwarg值之前将数据更改为dict:
def search(self, query, **kwargs):
"""
Executes a searchquery, that is then stored and needs
to be called again to get results, using the returned
search_id.
:param query: Query to be run with the search
:return: Array of the current searchid, which is needed
for other functions, and the content of HTTP response.
"""
search_id = int(round(time.time() * 1000))
if len(args) > 0:
response = self._post(
'/server/search', data=dict(
query=query,
search_session_id=search_id,
user_session_id=self.token,
**kwargs
))
return search_id, response.json()
在python 3中,您可以直接添加它,而不是合并,或将变量更改为dict。