表单使用哪种HTTP方法



我的web应用程序信息:

  • 前端:React.js
  • 后端:烧瓶
  • 目标:用户输入邮政编码,后端返回网页上的邮政编码坐标和距离
  • 问题:我最初的印象是,插入数据库时只使用POST请求,所以我将API端点定义为GET方法。然而,由于我认为最好不要传递GET方法的主体参数,所以我目前的解决方案是将其作为POST请求。这是最好的做法吗?或者有更好的方法吗

前端代码

const handleSubmit = e => {
const formData = { "origin": originInput, "destination": destinationInput 
}
e.preventDefault();
checkError();
fetch('/path', {
credentials: 'include',
method: 'POST',
body: JSON.stringify(formData),
headers: { 'content-type': 'application/json' }
}).then(res => console.log(res))
.catch(err => console.log(err));
};
return (
<div className="card">
<form onSubmit={handleSubmit}>            
<section>
<label htmlFor="origin">Start Zip</label>
<input 
type="text" 
name="origin" 
id="origin" 
onChange={e => handleChange(e, updateOriginInput)} 
/>
</section>
<section>
<label htmlFor="destination">End Zip</label>
<input 
type="text" 
name="destination" 
id="destination" 
onChange={e => handleChange(e, updateDestinationInput)} 
/>
</section>
<section>
<input type="submit" value="Get Directions" />
</section>
</form>
</div>
);

后端代码

@path.route('/path', methods=['POST'])
def path_info():
request_data = request.get_json()
ORIGIN = request_data['origin']
DESTINATION = request_data['destination']
# The df var is pd.DataFrame(zip([ORIGIN, get_lon(ORIGIN), get_lat(ORIGIN)], [DESTINATION, get_lon(DESTINATION), get_lat(DESTINATION)])).T
df, MILES = preprocess(ORIGIN, DESTINATION)
print(df)
return {
'origin': {
'longitude': df['LON'][0],
'latitude': df['LAT'][0]
},
'destination': {
'longitude': df['LON'][1],
'latitude': df['LAT'][1]
},
'miles': MILES
}

提前感谢!

我最初的印象是,插入数据库时只使用POST请求,所以我将API端点定义为GET方法。然而,由于我认为最好不要传递GET方法的主体参数,所以我目前的解决方案是将其作为POST请求。这是最好的做法吗?或者有更好的方法吗?

Today:如果您需要在HTTP请求的正文中发送信息,那么您应该使用POST(在特定情况下可以使用PUT/PATCH(。

如果您想使用GET,那么您需要获取表单收集的信息,并找出如何将其编码到请求URI本身中。在web上,它通常采用键值对的形式,这些键值对经过application/x-www-form-urlcode并复制到请求URI的查询部分。它在查询部分没有-URI模板也可以用来描述URI路径的扩展。


有一个互联网草案来标准化一种新的HTTP方法(QUERY(,该方法将为带有消息体的安全请求提供语义;但这种方法还没有被标准化或注册。

最新更新