2017-09-01 114 views
0

在下面的代码中,我的快递服务器正在处理来自天气应用的获取请求。当最初加载页面以获取位置时,会调用一个函数。然而,我使用的api,'geolocation',使用一个post请求来获取位置数据。在获取路径内发出一个post请求unrESTful?

对我来说,在我的获得路线里面发一个帖子请求是不可靠的吗?

router.get('/', function(req,res){ 
    axios.post(`https://www.googleapis.com/geolocation/v1/geolocate?key=${googleGeo}`, { 
     considerIp: "true", 
    }) 
    .then((data) => { 
     return {'lat': data.data.location.lat, 'lng':data.data.location.lng } 
    }) 
    .catch(error => { 
     console.log(error) 
    }) 
}); 
+1

根本不是。你的GET路线正在做一些工作。 RESTful不关心它。 –

+0

如果你正在对同一个应用程序进行POST,它会很不稳定。 –

+0

与您的问题没有严格关系,但请注意,Google API请求的发件人IP将是您的Node服务器的,而不是发起客户端的。客户端的IP可以通过['req.ip'](http://expressjs.com/en/api.html#req.ip)访问(如果使用的是ExpressJS,那你自己),但我认为Google的API可以让你传递它。如果这会成为问题,你可能需要另一个API。 – tavnab

回答

0

只要你对你的客户端API是如何呈现其资源的RESTful,它不应该不管你怎么弄/存储/管理后端的数据,至少就REST关注。

这就是说,不要忘了发送响应(例如res.json({lat:..., lng:...})),而不是从你的.then()处理程序返回,并在您的.catch()处理程序发送一个错误状态代码(例如res.sendStatus(500))。

0

我不会挂在单词post上,特别是当你使用别人的API时。重要的是,当有人发出GET请求时,它不应该改变状态。在您的情况下,API可能使用POST方法,以便您不需要将请求对象粘贴到查询字符串中,或​​者可能由于请求的大小限制。它只是获取地理数据 - 不会改变状态。

如果它突变状态,它应该是POSTPUTDELETE。如果它只是真正的只读,无论您在引擎盖下面调用的API如何,GET总是合适的。