What are REST resources?

2019-01-10 11:14发布

What are REST resources and how do they relate to resource names and resource representations?

I read a few articles on the subject, but they were too abstract and they left me more confused than I was before.

Is the following URL a resource? If it is, what is the name of that resource and what is its representation?

http://api.example.com/users.json?length=2&offset=5

The GET response of the URL should look something like:

[
   {
      id: 6,
      name: "John"
   },
   {
      id: 7,
      name: "Jane"
   }
]

11条回答
可以哭但决不认输i
2楼-- · 2019-01-10 11:38

What’s a Resource?

A resource is anything that’s important enough to be referenced as a thing in itself. If your users might “want to create a hypertext link to it, make or refute assertions about it, retrieve or cache a representation of it, include all or part of it by reference into another representation, annotate it, or perform other operations on it”, then you should make it a resource.

Usually, a resource is something that can be stored on a computer and represented as a stream of bits: a document, a row in a database, or the result of running an algorithm. A resource may be a physical object like an apple, or an abstract concept like courage, but (as we’ll see later) the representations of such resources are bound to be disappointing. Here are some possible resources:

  • Version 1.0.3 of the software release
  • The latest version of the software release
  • The first weblog entry for October 24, 2006
  • A road map of Little Rock, Arkansas
  • Some information about jellyfish
  • A directory of resources pertaining to jellyfish
  • The next prime number after 1024
  • The next five prime numbers after 1024
  • The sales numbers for Q42004
  • The relationship between two acquaintances, Alice and Bob
  • A list of the open bugs in the bug database

The text is from the O'Reilly book "RESTful Web Services".

查看更多
淡お忘
3楼-- · 2019-01-10 11:39

A resource is:

  • a noun
  • that is unique
  • and can be represented as data
  • and has at least one URI

I go into more detail on my blog post, What, Exactly, Is a RESTful Resource?

查看更多
你好瞎i
4楼-- · 2019-01-10 11:45

REST

This architectural style was defined in the chapter 5 of Roy T. Fielding's dissertation.

REST is about resource state manipulation through their representations on the top of stateless communication between client and server. It's a protocol independent architectural style but, in practice, it's commonly implemented on the top of the HTTP protocol.

Resources

The resource itself is an abstraction and, in the words of the author, a resource can be any information that can be named. The domain entities of an application (e.g. a person, a user, a invoice, a collection of invoices, etc) can be resources. See the following quote from Fielding's dissertation:

5.2.1.1 Resources and Resource Identifiers

The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author's hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.

More precisely, a resource R is a temporally varying membership function MR(t), which for time t maps to a set of entities, or values, which are equivalent. The values in the set may be resource representations and/or resource identifiers. [...]

Resource representations

A JSON document is resource representation that allows you to represent the state of a resource. A server can provide different representations for the same resource. For example, using XML and JSON documents. A client can use content negotiation to request different representations of the same resource.

Quoting Fielding's dissertation:

5.2.1.2 Representations

REST components perform actions on a resource by using a representation to capture the current or intended state of that resource and transferring that representation between components. A representation is a sequence of bytes, plus representation metadata to describe those bytes. Other commonly used but less precise names for a representation include: document, file, and HTTP message entity, instance, or variant.

A representation consists of data, metadata describing the data, and, on occasion, metadata to describe the metadata (usually for the purpose of verifying message integrity). Metadata is in the form of name-value pairs, where the name corresponds to a standard that defines the value's structure and semantics. Response messages may include both representation metadata and resource metadata: information about the resource that is not specific to the supplied representation. [...]

Over HTTP, request and response headers can be used to exchange metadata about the representation.

Resource identifiers

A URL a resource identifier that identifies/locates a resource in the server.


This answer may also be insightful.

查看更多
聊天终结者
5楼-- · 2019-01-10 11:47

You've only provided what appear to be relative parameters rather than "ID" which is (or should be) concrete. Remember, get operations should be idempotent (i.e. repeatable with the same outcome).

查看更多
【Aperson】
6楼-- · 2019-01-10 11:48

The reason why articles on REST resources are abstract is because the concept of a REST resource is abstract. It's basically "whatever thing is accessed by the URL you supply". So, in your example, the resource would be the list of two users starting at offset 5 in some bigger list. Note that, how the resource is implemented is a detail you don't care about unless you are the one writing the implementation.

Is the following URL a resource?

The URL is not a resource, it is a label that identifies the resource, it is, if you like, the name of the resource.

The JSON is a representation of the resource.

查看更多
家丑人穷心不美
7楼-- · 2019-01-10 11:49

Conceptually you can think about a resource as everything which is accessible on the web using an URL. If you stick to this rule http://api.example.com/users.json?length=2&offset=5 can be considered a resource

查看更多
登录 后发表回答