代码之家  ›  专栏  ›  技术社区  ›  Christian Studer delphist

在大数据集(即天气数据)的背景下,什么是一种宁静的资源?

  •  5
  • Christian Studer delphist  · 技术社区  · 15 年前

    因此,我正在开发一个Web服务来访问我们的天气预报数据(10000个地点,每个参数40个,接下来14天的小时值=大约1.3亿个值)。

    所以我读了所有关于休息服务及其意识形态的文章。

    所以我理解一个URL正在处理一个资源。

    但是什么 对我来说是一个资源?

    常见的用例是,您希望在一个时间跨度内的一个或多个位置获取几个参数的数据。所以很明显,给每个值一个自己的URL是不现实的,会导致成百上千的请求。我有一种感觉,我的具体问题不完全符合这个宁静的模式。

    更新: 澄清:服务有两种使用模式。1.原始数据;多个位置和参数的行和行数据。

    1. 解释数据;计算为符号(例如太阳和云)和其他参数的原始数据。

    没有一个“预测”。不同的客户对数据有不同的需求。

    我认为这不适合REST模式的原因是,虽然我实际上可以有一个“预测”资源,但我仍然需要提交大量的请求参数。所以对资源的一个简单的GET请求不起作用,我最终将数据发布到所有地方。

    5 回复  |  直到 9 年前
        1
  •  3
  •   Rich Apodaca    15 年前

    因此,我正在开发一个Web服务来访问我们的天气预报数据(10000个地点,每个参数40个,接下来14天的小时值=大约1.3亿个值)。…但在我的情况下,什么是资源呢?

    这取决于问题域的详细信息。仅仅拥有大量的数据并不是避免休息的好理由。有聪明的方法和愚蠢的方法来建模和公开数据。

    正如您正确地看到的,此时您的主要目标应该是了解什么是资源。我对天气预报的了解只够跟随天气频道,在这里我不会有太多帮助。像你这样的领域专家可以打这个电话。

    如果您要更详细地解释您正在使用的主要领域概念,可能会使提供特定建议变得更容易一些。

    例如,一个资源可能是预测的。当天气预报员谈论天气预报时,会有什么词出现?当你考虑将一个预测分解成更小的元素时,你用什么词来描述这些片段?

    递归地执行这个过程,您可能会列出一些重要的术语。不要忘记这些术语可以描述事物或行为。想想这些术语的真正含义,您可以使用哪些数据对它们进行建模,以及如何对它们进行聚合。

    在这一点上,你将有一些东西,你可以开始建立一个休息系统周围-但不是以前。

    别忘了,RESTful系统不是用HTTP包装的数据转储,而是 hypertext-driven 系统。

    也别忘了 media types 是服务器与其客户机之间的联系点。一个媒体类型只受你想象力的限制,如果你很聪明的话,它可以模拟任何大小的数据集。它可以包含XML、JSON、YAML、二进制元素(如bloom过滤器)或任何可以解决问题的元素。

        2
  •  1
  •   Andy Dent    15 年前

    首先,没有一次又一次 正确答案 .

    每个有效的URL都是有意义的查询,可以将其视为为为寻找数据的人提供查询表单的等价物,这可能有助于缩小场景范围。

    这是一个个人品味的问题,也可能是你使用的工具箱,关于什么进入基本的URL路径,以及什么参数被编码。争论有点像XML关于将值放入元素和属性的争论。这并不总是一个理性的或逻辑上决定的问题,每个人对你的决定的评论也不会友善。

    如果您使用的是类似Rails的后端,这意味着 conventions . 即使你没有使用Rails,以同样的方式工作也是有意义的,除非你有一个强有力的理由去改变。这样,编写客户机与基于Rails的服务对话的人会发现您的服务更容易理解,并且可以节省您的文档时间;-)

        3
  •  0
  •   Richard    15 年前

    也许您可以使用Forecast作为资源,并使用XLink深入到细粒度服务。

        4
  •  0
  •   Rajat    15 年前

    有没有可能这样做,因为你有这么多参数,所以我在想,如果你能把它与ID/参数组合的组合联系起来,以减小URL的大小

    /天气预报服务//天/小时

        5
  •  0
  •   kenny    15 年前
    www.weatherornot.com/today/days/x       // (where x is number of days)
    www.weatherornot.com/today/9am/hours/h  // (where h is number of hours)