【问题标题】:Is making a post request inside a get route unRESTful?在获取路由中发出发布请求是否不稳定?
【发布时间】:2018-02-11 00:14:39
【问题描述】:

在下面的代码中,我的快速服务器正在处理来自天气应用程序的获取请求。当页面最初加载以获取位置时,会调用一个函数。但是,我正在使用的 api 'geolocation' 使用发布请求来获取位置数据。

像这样在我的 get 路由中发出 post 请求对我来说是不稳定的吗?

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)
  })
});

【问题讨论】:

  • 一点也不。您的 GET 路线正在做一些工作。 RESTful 不关心它。
  • 如果您对同一个应用程序进行 POST 操作会很不安。
  • 与您的问题不严格相关,但请注意,对 Google API 的请求的发件人 IP 将是您的节点服务器,而不是原始客户端的。客户端的 IP 可以通过req.ip 访问(如果您使用的是 ExpressJS),但我认为 Google 的 API 不允许您将其传递。如果这会成为问题,您可能需要另一个 API。
  • 谢谢大家的建议。 Tavnab,你证实了我的怀疑

标签: javascript express restful-authentication


【解决方案1】:

我不会对 post 这个词感兴趣,尤其是当您使用其他人的 API 时。重要的是当有人发出GET 请求时,它不应该改变状态。在您的情况下,API 可能使用 POST 方法,因此您不需要将请求对象粘贴到查询字符串中,或​​者可能是由于 GET 请求的大小限制。它只是获取地理数据 - 而不是变异状态。

如果它改变状态,它应该是POSTPUTDELETE。如果它真的是只读的,GET 总是合适的,不管你在后台调用什么 API。

【讨论】:

    【解决方案2】:

    只要您面向客户端的 API 在呈现其资源的方式上是 RESTful 的,那么您在后端如何获取/存储/管理该数据并不重要,至少就 REST 而言是这样。

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

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 2015-12-30
      • 2022-06-24
      • 2014-06-16
      • 1970-01-01
      • 2013-10-12
      • 2014-08-17
      • 1970-01-01
      • 2019-08-10
      相关资源
      最近更新 更多