O que exatamente é a programação RESTful?

3983

O que exatamente é a programação RESTful?

hasen
fonte
3
veja também a resposta no seguinte link stackoverflow.com/a/37683965/3762855
Ciro Corvino 7/16
3
O REST pode estar ficando um pouco velho agora;) youtu.be/WQLzZf34FJ8
Vlady Veselinov
1
Além disso, consulte este link para obter mais informações news.ycombinator.com/item?id=3538585
Ashraf.Shk786
5
@ OLIVER.KOO observação agradável. É só que eu perguntei em um momento em que era uma coisa nova. Estava sendo jogado muito, mas poucas pessoas sabiam do que se tratava. Pelo menos eu não fiz, e parece que eu pedir isso os ajudou porque eles também queriam saber.
hasen

Respostas:

743

Um estilo de arquitetura chamado REST (Representational State Transfer) defende que os aplicativos da Web usem HTTP como originalmente previsto . As pesquisas devem usar GETsolicitações. PUT, POST, E DELETEos pedidos devem ser usados para mutação, criação e eliminação, respectivamente .

Os proponentes do REST tendem a favorecer URLs, como

http://myserver.com/catalog/item/1729

mas a arquitetura REST não requer esses "URLs bonitos". Uma solicitação GET com um parâmetro

http://myserver.com/catalog?item=1729

é tão RESTful.

Lembre-se de que as solicitações GET nunca devem ser usadas para atualizar informações. Por exemplo, uma solicitação GET para adicionar um item a um carrinho

http://myserver.com/addToCart?cart=314159&item=1729

não seria apropriado. As solicitações GET devem ser idempotentes . Ou seja, emitir uma solicitação duas vezes não deve ser diferente de emitir uma vez. É isso que torna os pedidos em cache. Uma solicitação "adicionar ao carrinho" não é idempotente - emitir duas vezes adiciona duas cópias do item ao carrinho. Uma solicitação POST é claramente apropriada nesse contexto. Assim, mesmo um aplicativo Web RESTful precisa de seu compartilhamento de solicitações POST.

Isso foi retirado do excelente livro Core JavaServer faces de David M. Geary.

Shirgill Farhan
fonte
2
Como usar as operações idempotentes disponíveis: GET (seguro), PUT & DELETE (a exceção é mencionada neste link restapitutorial.com/lessons/idempotency.html). Referência adicional para métodos seguros e idempotentes w3.org/Protocols/rfc2616/rfc2616-sec9.html
Abhijeet
5
a) o ponto importante sobre o GET é a segurança, não a idempotência; b) @Abhijeet: a RFC 2616 foi obsoleta em 2014; ver RF 7230ff.
Julian Reschke
12
Isto está errado. Leia isto para obter a interpretação correta do REST roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven ou este stackoverflow.com/questions/19843480/…
kushalvm
4
@kushalvm Essa definição acadêmica de REST não é usada na prática.
Chimpanzé guerreiro
3
Efetivamente, podemos saber se um conceito está operacional desde que não conseguem simples dar-lhe um estábulo e definição compreensível para todos
HoCo_
2918

REST é o princípio arquitetônico subjacente da web. O mais surpreendente da Web é o fato de que clientes (navegadores) e servidores podem interagir de maneiras complexas sem que o cliente saiba nada de antemão sobre o servidor e os recursos que ele hospeda. A principal restrição é que o servidor e o cliente devem concordar com a mídia usada, que no caso da Web é HTML .

Uma API que segue os princípios do REST não exige que o cliente saiba nada sobre a estrutura da API. Em vez disso, o servidor precisa fornecer todas as informações que o cliente precisa para interagir com o serviço. Um formulário HTML é um exemplo disso: O servidor especifica o local do recurso e os campos obrigatórios. O navegador não sabe com antecedência onde enviar as informações e não sabe com antecedência quais informações enviar. Ambas as formas de informação são totalmente fornecidas pelo servidor. (Esse princípio é chamado HATEOAS : Hipermídia como o mecanismo do estado do aplicativo .)

Então, como isso se aplica ao HTTP e como ele pode ser implementado na prática? O HTTP é orientado em torno de verbos e recursos. Os dois verbos em uso mainstream são GETe POST, que eu acho que todos reconhecerão. No entanto, o padrão HTTP define vários outros, como PUTe DELETE. Esses verbos são aplicados aos recursos, de acordo com as instruções fornecidas pelo servidor.

Por exemplo, vamos imaginar que temos um banco de dados do usuário gerenciado por um serviço da web. Nosso serviço usa uma hipermídia personalizada baseada em JSON, para a qual atribuímos o tipo mimético application/json+userdb(também pode haver um application/xml+userdbe application/whatever+userdb- muitos tipos de mídia podem ser suportados). O cliente e o servidor foram programados para entender esse formato, mas não sabem nada um do outro. Como Roy Fielding aponta:

Uma API REST deve gastar quase todo o seu esforço descritivo na definição do (s) tipo (s) de mídia usado para representar recursos e direcionar o estado do aplicativo, ou na definição de nomes de relações estendidos e / ou marcação ativada por hipertexto para os tipos de mídia padrão existentes.

Uma solicitação para o recurso base /pode retornar algo como isto:

Solicitação

GET /
Accept: application/json+userdb

Resposta

200 OK
Content-Type: application/json+userdb

{
    "version": "1.0",
    "links": [
        {
            "href": "/user",
            "rel": "list",
            "method": "GET"
        },
        {
            "href": "/user",
            "rel": "create",
            "method": "POST"
        }
    ]
}

Sabemos pela descrição de nossa mídia que podemos encontrar informações sobre recursos relacionados nas seções chamadas "links". Isso é chamado de controles Hypermedia . Nesse caso, podemos dizer a partir de uma seção como essa que podemos encontrar uma lista de usuários fazendo outra solicitação para /user:

Solicitação

GET /user
Accept: application/json+userdb

Resposta

200 OK
Content-Type: application/json+userdb

{
    "users": [
        {
            "id": 1,
            "name": "Emil",
            "country: "Sweden",
            "links": [
                {
                    "href": "/user/1",
                    "rel": "self",
                    "method": "GET"
                },
                {
                    "href": "/user/1",
                    "rel": "edit",
                    "method": "PUT"
                },
                {
                    "href": "/user/1",
                    "rel": "delete",
                    "method": "DELETE"
                }
            ]
        },
        {
            "id": 2,
            "name": "Adam",
            "country: "Scotland",
            "links": [
                {
                    "href": "/user/2",
                    "rel": "self",
                    "method": "GET"
                },
                {
                    "href": "/user/2",
                    "rel": "edit",
                    "method": "PUT"
                },
                {
                    "href": "/user/2",
                    "rel": "delete",
                    "method": "DELETE"
                }
            ]
        }
    ],
    "links": [
        {
            "href": "/user",
            "rel": "create",
            "method": "POST"
        }
    ]
}

Podemos dizer muito dessa resposta. Por exemplo, agora sabemos que podemos criar um novo usuário POSTao /user:

Solicitação

POST /user
Accept: application/json+userdb
Content-Type: application/json+userdb

{
    "name": "Karl",
    "country": "Austria"
}

Resposta

201 Created
Content-Type: application/json+userdb

{
    "user": {
        "id": 3,
        "name": "Karl",
        "country": "Austria",
        "links": [
            {
                "href": "/user/3",
                "rel": "self",
                "method": "GET"
            },
            {
                "href": "/user/3",
                "rel": "edit",
                "method": "PUT"
            },
            {
                "href": "/user/3",
                "rel": "delete",
                "method": "DELETE"
            }
        ]
    },
    "links": {
       "href": "/user",
       "rel": "list",
       "method": "GET"
    }
}

Também sabemos que podemos alterar os dados existentes:

Solicitação

PUT /user/1
Accept: application/json+userdb
Content-Type: application/json+userdb

{
    "name": "Emil",
    "country": "Bhutan"
}

Resposta

200 OK
Content-Type: application/json+userdb

{
    "user": {
        "id": 1,
        "name": "Emil",
        "country": "Bhutan",
        "links": [
            {
                "href": "/user/1",
                "rel": "self",
                "method": "GET"
            },
            {
                "href": "/user/1",
                "rel": "edit",
                "method": "PUT"
            },
            {
                "href": "/user/1",
                "rel": "delete",
                "method": "DELETE"
            }
        ]
    },
    "links": {
       "href": "/user",
       "rel": "list",
       "method": "GET"
    }
}

Observe que estamos usando diferentes verbos HTTP ( GET, PUT, POST, DELETEetc.) para manipular esses recursos, e que o único conhecimento presumimos por parte do cliente é a nossa definição de mídia.

Leitura adicional:

(Essa resposta foi alvo de uma grande quantidade de críticas por ter falhado o argumento. Na maioria das vezes, essa foi uma crítica justa. O que eu descrevi originalmente estava mais de acordo com a maneira como o REST era geralmente implementado alguns anos atrás, quando eu primeiro escrevi isso, em vez de seu verdadeiro significado. Revi a resposta para representar melhor o significado real.)

Emil H
fonte
178
Não. O REST não apareceu apenas como outra palavra da moda. Ele surgiu como um meio de descrever uma alternativa à troca de dados baseada em SOAP. O termo REST ajuda a estruturar a discussão sobre como transferir e acessar dados.
tvanfosson 22/03/09
111
No entanto, o coração do REST (na aplicação prática) é "não use GET para fazer alterações, use POST / PUT / DELETE", que é um conselho que eu tenho ouvido (e seguido) desde muito antes do SOAP aparecer. RESTO tem sido sempre lá, ele simplesmente não obter um nome além "a maneira de fazê-lo" até recentemente.
Dave Sherohman 22/03/2009
37
Não se esqueça de "Hipertexto como o mecanismo do estado do aplicativo".
Hank Gay
45
Esta resposta erra o ponto. O HTTP mal é mencionado na tese de Fielding.
user359996
18
Esta resposta não menciona o objetivo do REST e faz parecer que tudo se trata de URIs limpos. Embora essa possa ser a percepção popular do REST, as respostas de D.Shawley e oluies são mais precisas - trata-se de poder tirar proveito dos recursos incorporados à arquitetura, como o cache, trabalhando com ela em vez de contra ela. URIs mais bonitos são principalmente um efeito colateral comum.
TR
534

A programação RESTful é sobre:

  • recursos sendo identificados por um identificador persistente: URIs são a escolha onipresente de identificador atualmente
  • recursos que estão sendo manipulados usando um conjunto comum de verbos: HTTP métodos são o caso comumente visto - o venerável Create, Retrieve, Update, Deletetorna-se POST, GET, PUT, e DELETE. Mas o REST não se limita ao HTTP, é apenas o transporte mais usado no momento.
  • a representação real recuperada para um recurso depende da solicitação e não do identificador: use Accept headers para controlar se deseja XML, HTTP ou mesmo um objeto Java representando o recurso
  • mantendo o estado no objeto e representando o estado na representação
  • representando os relacionamentos entre recursos na representação do recurso: os links entre objetos são incorporados diretamente na representação
  • representações de recursos descrevem como a representação pode ser usada e sob quais circunstâncias ela deve ser descartada / recuperada de maneira consistente: uso de cabeçalhos HTTP Cache-Control

O último é provavelmente o mais importante em termos de consequências e eficácia geral do REST. No geral, a maioria das discussões RESTful parece centrar-se no HTTP e seu uso em um navegador e o que não. Entendo que R. Fielding cunhou o termo quando descreveu a arquitetura e as decisões que levam ao HTTP. Sua tese é mais sobre a arquitetura e a capacidade de cache dos recursos do que sobre o HTTP.

Se você está realmente interessado no que é uma arquitetura RESTful e por que ela funciona, leia sua tese algumas vezes e leia a coisa toda, não apenas o Capítulo 5! A seguir, veja por que o DNS funciona . Leia sobre a organização hierárquica do DNS e como as referências funcionam. Em seguida, leia e considere como o cache do DNS funciona. Por fim, leia as especificações HTTP ( RFC2616 e RFC3040 em particular) e considere como e por que o cache funciona da maneira que funciona. Eventualmente, apenas clique. A revelação final para mim foi quando vi a semelhança entre DNS e HTTP. Depois disso, entender por que as interfaces SOA e Message Passing Interfaces são escaláveis ​​começa a clicar.

Eu acho que o truque mais importante para entender a importância da arquitetura e as implicações de desempenho de uma arquitetura RESTful e Shared Nothing é evitar ficar preso nos detalhes da tecnologia e da implementação. Concentre-se em quem possui os recursos, quem é responsável por criá-los / mantê-los, etc. Em seguida, pense nas representações, protocolos e tecnologias.

D.Shawley
fonte
36
Uma resposta que forneça uma lista de leitura é muito apropriada para esta pergunta.
Ellisbben
25
Obrigado pela atualização. PUTe POSTnão mapeie realmente um a um com atualização e criação. PUTpode ser usado para criar se o cliente está ditando qual será o URI. POSTcria se o servidor estiver atribuindo o novo URI.
D.Shawley
8
Não se esqueça do PATCH.
epitka
4
Um URN é um URI que usa o urn:esquema. Conceitualmente, não há diferença; no entanto, um URN exige que você tenha um método definido separadamente para "localizar" o recurso identificado (nomeado) pelo URN. Deve-se tomar cuidado para garantir que você não introduza acoplamentos implícitos ao relacionar recursos nomeados e sua localização.
D.Shawley
2
@ellisbben Concordou. Se bem entendi esta é a tese que deu origem ao RESTO: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Philip Couling
408

É assim que pode parecer.

Crie um usuário com três propriedades:

POST /user
fname=John&lname=Doe&age=25

O servidor responde:

200 OK
Location: /user/123

No futuro, você poderá recuperar as informações do usuário:

GET /user/123

O servidor responde:

200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>

Para modificar o registro ( lnamee agepermanecerá inalterado):

PATCH /user/123
fname=Johnny

Para atualizar o registro (e consequentemente lnamee ageserá NULL):

PUT /user/123
fname=Johnny
Pbreitenbach
fonte
39
Para mim, essa resposta capturou a essência da resposta desejada. Simples e pragmático. É verdade que existem muitos outros critérios, mas o exemplo fornecido é uma excelente plataforma de lançamento.
22412 CyberFonic
92
No último exemplo, @pbreitenbach usa PUT fname=Jonny. Isso iria definir lnamee ageaos valores (provavelmente NULL ou a string vazia, e inteiros 0) inadimplemento, porque um PUT substitui todo o recurso com os dados da representação fornecido. Não é isso que está implícito em "atualização"; para fazer uma atualização real, use o PATCHmétodo, pois isso não altera os campos que não estão especificados na representação.
Nicholas Shanks
24
Nicholas está certo. Além disso, o URI para o primeiro POST que cria um usuário deve ser chamado de usuários, porque /user/1não faz sentido e deve haver uma listagem em /users. A resposta deve ser uma 201 Createde não apenas OK nesse caso.
DanMan
1
Este é apenas um exemplo de uma API, não necessariamente uma API RESTful. Um RESTful possui restrições às quais adere. Arquitetura cliente-servidor, sem estado, capacidade de cache, sistema em camadas, interface uniforme.
Radmation
Isso é uma resposta muito compacto que cobriu todos os http servlet métodos de acesso
Himanshu Ahuja
181

Um ótimo livro sobre o REST é o REST na prática .

As leituras obrigatórias são REST (Representational State Transfer) e as APIs REST devem ser orientadas por hipertexto

Consulte o artigo de Martin Fowlers, Richardson Maturity Model (RMM), para obter uma explicação sobre o que é um serviço RESTful.

Modelo de Maturidade de Richardson

Para ser RESTful, um Serviço precisa atender a Hipermídia como o Estado do Mecanismo de Aplicativo. (HATEOAS) , ou seja, ele precisa atingir o nível 3 no RMM, leia o artigo para obter detalhes ou os slides da conversa sobre o qcon .

A restrição HATEOAS é um acrônimo para Hypermedia como o mecanismo do estado do aplicativo. Esse princípio é o principal diferenciador entre um REST e a maioria das outras formas de sistema do servidor cliente.

...

Um cliente de um aplicativo RESTful precisa conhecer apenas uma única URL fixa para acessá-lo. Todas as ações futuras devem ser descobertas dinamicamente a partir de links hipermídia incluídos nas representações dos recursos retornados a partir dessa URL. Espera-se também que os tipos de mídia padronizados sejam entendidos por qualquer cliente que possa usar uma API RESTful. (Da Wikipédia, a enciclopédia livre)

O teste REST Litmus para estruturas da Web é um teste de maturidade semelhante para estruturas da web.

Aproximando-se do REST puro: aprender a amar o HATEOAS é uma boa coleção de links.

REST versus SOAP para a nuvem pública discute os níveis atuais de uso de REST.

REST e versionamento discutem Extensibilidade, Versionamento, Evolutibilidade, etc. através da Modificabilidade

oluies
fonte
5
Penso que esta resposta toca o ponto principal da compreensão do REST: o que significa a palavra representacional . Nível 1 - Recursos diz sobre estado . Nível 2 - Verbos HTTP diz sobre transferência ( alteração de leitura ). Nível 3 - HATEOAS diz que direcionar futuras transferências via representação (retornado JSON / XML / HTML), o que significa que você sabe como dizer a próxima rodada de conversação com as informações retornadas. Portanto, o REST lê: "(representação (transferência de estado))", em vez de "(transferência (estado de representação))".
lcn
136

O que é REST?

REST significa Representational State Transfer. (Às vezes, é escrito "ReST".) Ele conta com um protocolo de comunicações com cache, sem estado, cliente-servidor e estado - e em praticamente todos os casos, o protocolo HTTP é usado.

REST é um estilo de arquitetura para projetar aplicativos em rede. A idéia é que, em vez de usar mecanismos complexos como CORBA, RPC ou SOAP para conectar-se entre máquinas, HTTP simples seja usado para fazer chamadas entre máquinas.

De várias maneiras, a própria World Wide Web, baseada em HTTP, pode ser vista como uma arquitetura baseada em REST. Os aplicativos RESTful usam solicitações HTTP para postar dados (criar e / ou atualizar), ler dados (por exemplo, fazer consultas) e excluir dados. Portanto, o REST usa HTTP para todas as quatro operações CRUD (Criar / Ler / Atualizar / Excluir).

REST é uma alternativa leve a mecanismos como RPC (Remote Procedure Calls) e Web Services (SOAP, WSDL, et al.). Mais tarde, veremos quanto mais simples o REST é.

Apesar de simples, o REST é completo; basicamente não há nada que você possa fazer nos serviços da Web que não possa ser feito com uma arquitetura RESTful. REST não é um "padrão". Nunca haverá uma recomendação do W3C para o REST, por exemplo. E, embora existam estruturas de programação REST, trabalhar com o REST é tão simples que você pode "rolar sozinho" com recursos de biblioteca padrão em linguagens como Perl, Java ou C #.

Uma das melhores referências que encontrei quando tento encontrar o verdadeiro significado simples de descanso.

http://rest.elkstein.org/

Ravi
fonte
Esta é uma resposta realmente concisa. Você também pode descrever por que o REST é chamado sem estado?
Chaklader Asfak Arefe 12/02/19
89

O REST está usando os vários métodos HTTP (principalmente GET / PUT / DELETE) para manipular dados.

Em vez de usar um URL específico para excluir um método (digamos /user/123/delete), você envia uma solicitação DELETE para a /user/[id]URL, edita um usuário, recupera informações sobre um usuário para o qual você envia uma solicitação GET./user/[id]

Por exemplo, em vez disso, um conjunto de URLs que podem se parecer com alguns dos seguintes.

GET /delete_user.x?id=123
GET /user/delete
GET /new_user.x
GET /user/new
GET /user?id=1
GET /user/id/1

Você usa os "verbos" HTTP e tem ..

GET /user/2
DELETE /user/2
PUT /user
dbr
fonte
18
Que está "usando HTTP corretamente", o que não é o mesmo que "tranqüilas" (embora ele está relacionado a ele)
Julian Reschke
2
Você também pode usar / user / del / 2 e / user / remove / 2 ou ... GET / DELETE / PUT / POST são apenas a maneira padronizada e "adequada" de fazer essas coisas (e como Julian diz, isso não é tudo existe para descansar)
dbr
1
Claro, mas não há razão para evitá-los. O REST apenas poupa você a reinventar a roda a cada vez. Para uma API, REST é grande (consistência!), Mas para estruturar um site aleatório isso realmente não importa Eu diria que (pode ser mais incômodo do que vale a pena)
DBR
14
Vadim, isso seria simplesmente RPC. Também é perigoso usar o GET para modificar dados, já que (entre outros motivos) um mecanismo de pesquisa pode aumentar os links de exclusão e visitar todos eles.
21413 aehlke
7
@aehlke - Eu acho que a verdadeira pergunta seria "Por que um usuário anônimo tem a capacidade de excluir registros do seu sistema?"
Spencer Ruport
68

É a programação em que a arquitetura do seu sistema se encaixa no estilo REST, apresentado por Roy Fielding em sua tese . Como esse é o estilo arquitetônico que descreve a web (mais ou menos), muitas pessoas estão interessadas nela.

Resposta bônus: Não. A menos que você esteja estudando arquitetura de software como um acadêmico ou projetando serviços da Web, não há realmente nenhuma razão para ouvir esse termo.

Hank Gay
fonte
2
mas não direto .. torna mais complicado do que precisa ser.
hasen
4
Além disso, mesmo que os termos REST e RESTful sejam usados ​​quase que exclusivamente no domínio de aplicativos da Web no momento, tecnicamente não há nada que vincule o REST ao HTTP.
Hank Gay
3
O blog de Fielding tem artigos bons e mais fáceis de entender sobre REST e equívocos comuns: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
aehlke
3
@HankGay Acho que a razão pela qual não é mais esotérico é que a maioria dos desenvolvedores de serviços da web vê o REST como uma maravilhosa simplificação sobre alternativas como SOAP. Eles não necessariamente se empenham em corrigir todos os detalhes técnicos do REST - e isso provavelmente deixa os fanáticos do REST loucos - mas na maioria dos casos eles provavelmente não precisam se preocupar com coisas como garantir que seus resultados sejam "habilitados para hipermídia".
Moodboom 4/07/2013
47

Eu diria que a programação RESTful seria sobre a criação de sistemas (API) que seguem o estilo de arquitetura REST.

Achei este tutorial fantástico, curto e fácil de entender sobre o REST do Dr. M. Elkstein e citando a parte essencial que responderia a sua pergunta em sua maior parte:

Aprenda REST: um tutorial

REST é um estilo de arquitetura para projetar aplicativos em rede. A idéia é que, em vez de usar mecanismos complexos como CORBA, RPC ou SOAP para conectar-se entre máquinas, HTTP simples seja usado para fazer chamadas entre máquinas.

  • De várias maneiras, a própria World Wide Web, baseada em HTTP, pode ser vista como uma arquitetura baseada em REST.

Os aplicativos RESTful usam solicitações HTTP para postar dados (criar e / ou atualizar), ler dados (por exemplo, fazer consultas) e excluir dados. Portanto, o REST usa HTTP para todas as quatro operações CRUD (Criar / Ler / Atualizar / Excluir).

Eu não acho que você deva se sentir estúpido por não ouvir sobre o REST fora do Stack Overflow ..., eu estaria na mesma situação !; respostas para essa outra pergunta do SO sobre por que o REST está ficando grande agora podem aliviar alguns sentimentos.

Só você
fonte
Este artigo explica a relação entre HTTP e REST freecodecamp.org/news/…
Only You
45

Peço desculpas se não estou respondendo diretamente à pergunta, mas é mais fácil entender tudo isso com exemplos mais detalhados. Fielding não é fácil de entender devido a toda a abstração e terminologia.

Há um bom exemplo aqui:

Explicando o REST e o hipertexto: Spam-E, o robô de limpeza de spam

E melhor ainda, há uma explicação clara com exemplos simples aqui (o powerpoint é mais abrangente, mas você pode obter a maioria na versão html):

http://www.xfront.com/REST.ppt ou http://www.xfront.com/REST.html

Depois de ler os exemplos, pude ver por que Ken está dizendo que o REST é orientado por hipertexto. Na verdade, não tenho certeza de que ele esteja certo, porque esse / user / 123 é um URI que aponta para um recurso, e não está claro para mim que não é um descanso apenas porque o cliente sabe "fora de banda".

Esse documento do xfront explica a diferença entre REST e SOAP, e isso também é realmente útil. Quando Fielding diz: " Isso é RPC. Grita RPC. ", Fica claro que o RPC não é RESTful; portanto, é útil ver os motivos exatos para isso. (SOAP é um tipo de RPC.)

tompark
fonte
12
links legais, obrigado. Estou cansado desses caras do REST que dizem que algum exemplo não é "REST-ful", mas depois se recusam a dizer como alterar o exemplo para ser REST-ful.
Coder_tim
38

O que é REST?

REST em palavras oficiais, REST é um estilo de arquitetura construído em certos princípios, usando os fundamentos atuais da "Web". Existem 5 fundamentos básicos da web que são aproveitados para criar serviços REST.

  • Princípio 1: Tudo é um recurso No estilo de arquitetura REST, dados e funcionalidade são considerados recursos e são acessados ​​usando URIs (Uniform Resource Identifiers), normalmente links na Web.
  • Princípio 2: Todo recurso é identificado por um identificador exclusivo (URI)
  • Princípio 3: Use interfaces simples e uniformes
  • Princípio 4: A comunicação é feita pela representação
  • Princípio 5: Seja apátrida
Suresh Gupta
fonte
1
O que Communication is Done by Representationsignifica isso ?
mendez7
33

Vejo várias respostas que dizem que colocar tudo sobre o usuário 123 no recurso "/ user / 123" é RESTful.

Roy Fielding, que cunhou o termo, diz que as APIs REST devem ser orientadas por hipertexto . Em particular, "Uma API REST não deve definir nomes ou hierarquias de recursos fixos".

Portanto, se o caminho "/ user / 123" estiver codificado no cliente, não será realmente RESTful. Um bom uso do HTTP, talvez, talvez não. Mas não é RESTful. Tem que vir do hipertexto.

Ken
fonte
7
então .... como esse exemplo seria tranqüilo? como você alteraria o URL para torná-lo repousante?
hasen
1
hasen: O uso de um recurso para todas as operações pode ser necessário para RESTfulness, mas não é suficiente .
Ken
18
ok bem .. você poderia explicar mais? Qual é o sentido de dizer "não, esses caras estão errados .. eu sei o que é certo" sem dizer o que você sabe (ou pensa) estar certo?
hasen
5
Eu dei o link para a descrição de Fielding. Pensei ter dito exatamente a diferença relevante para as outras respostas: precisa ser movida pelo hipertexto. Se "/ user / 123" vier de alguma documentação da API fora da banda, não será RESTful. Se vier de um identificador de recurso no seu hipertexto, será.
Ken
1
Ou você pode usar um ponto de entrada como / users / e ele fornecerá uma lista de recursos do usuário E o URI de cada um. Em seguida, os recursos são detectáveis ​​e a navegação é orientada por hipertexto.
21710 as
26

A resposta é muito simples, há uma dissertação escrita por Roy Fielding.] 1 Nessa dissertação, ele define os princípios do REST. Se um aplicativo atender a todos esses princípios, esse será um aplicativo REST.

O termo RESTful foi criado porque ppl esgotou a palavra REST chamando seu aplicativo não REST como REST. Depois disso, o termo RESTful também se esgotou. Atualmente, estamos falando de APIs da Web e APIs Hypermedia , porque a maioria dos chamados aplicativos REST não preencheu a parte HATEOAS da restrição de interface uniforme.

As restrições REST são as seguintes:

  1. arquitetura cliente-servidor

    Portanto, ele não funciona com, por exemplo, soquetes PUB / SUB, é baseado em REQ / REP.

  2. comunicação sem estado

    Portanto, o servidor não mantém os estados dos clientes. Isso significa que você não pode usar o servidor de armazenamento em sessão lateral e precisa autenticar todas as solicitações. Seus clientes possivelmente enviam cabeçalhos de autenticação básicos por meio de uma conexão criptografada. (Em aplicativos grandes, é difícil manter muitas sessões.)

  3. uso de cache, se puder

    Portanto, você não precisa atender às mesmas solicitações repetidamente.

  4. interface uniforme como contrato comum entre cliente e servidor

    O contrato entre o cliente e o servidor não é mantido pelo servidor. Em outras palavras, o cliente deve ser dissociado da implementação do serviço. Você pode atingir esse estado usando soluções padrão, como o padrão IRI (URI) para identificar recursos, o padrão HTTP para trocar mensagens, tipos MIME padrão para descrever o formato de serialização do corpo, metadados (possivelmente vocabs RDF, microformatos etc.) para descreva a semântica de diferentes partes do corpo da mensagem. Para desacoplar a estrutura IRI do cliente, você deve enviar hiperlinks para os clientes em formatos hipermídia como (HTML, JSON-LD, HAL, etc.). Portanto, um cliente pode usar os metadados (possivelmente relações de link, vocabs RDF) atribuídos aos hiperlinks para navegar na máquina de estado do aplicativo através das transições de estado apropriadas, a fim de atingir seu objetivo atual.

    Por exemplo, quando um cliente deseja enviar um pedido para uma loja virtual, é necessário verificar os hiperlinks nas respostas enviadas pela loja virtual. Ao verificar os links, ele encontra um descrito com o http://schema.org/OrderAction . O cliente conhece o vocabulário schema.org e entende que, ao ativar esse hiperlink, ele enviará o pedido. Por isso, ativa o hiperlink e envia uma POST https://example.com/api/v1/ordermensagem com o corpo apropriado. Depois disso, o serviço processa a mensagem e responde com o resultado com o cabeçalho de status HTTP adequado, por exemplo, 201 - createdcom sucesso. Para anotar mensagens com metadados detalhados, a solução padrão para usar um formato RDF, por exemplo JSON-LD com um vocabulário REST, por exemplo Hydra e vocabs específicos de domínio comoVocabulário de ou qualquer outrodados vinculados ao schema.org e talvez um vocabulário específico de aplicativo personalizado, se necessário. Agora isso não é fácil, é por isso que a maioria das pessoas usa o HAL e outros formatos simples, que geralmente fornecem apenas um vocabulário REST, mas nenhum suporte a dados vinculados.

  5. construir um sistema em camadas para aumentar a escalabilidade

    O sistema REST é composto de camadas hierárquicas. Cada camada contém componentes que usam os serviços de componentes que estão na próxima camada abaixo. Assim, você pode adicionar novas camadas e componentes sem esforço.

    Por exemplo, há uma camada de cliente que contém os clientes e, abaixo, uma camada de serviço que contém um único serviço. Agora você pode adicionar um cache do lado do cliente entre eles. Depois disso, você pode adicionar outra instância de serviço e um balanceador de carga, e assim por diante ... O código do cliente e o código de serviço não serão alterados.

  6. código sob demanda para estender a funcionalidade do cliente

    Essa restrição é opcional. Por exemplo, você pode enviar um analisador para um tipo de mídia específico para o cliente e assim por diante ... Para fazer isso, talvez seja necessário um sistema padrão de carregador de plugins no cliente ou seu cliente será acoplado à solução do carregador de plug-ins. .

As restrições REST resultam em um sistema altamente escalável, no qual os clientes são dissociados das implementações dos serviços. Assim, os clientes podem ser reutilizáveis, em geral, assim como os navegadores da Web. Os clientes e os serviços compartilham os mesmos padrões e vocabs, para que possam entender um ao outro, apesar do cliente não conhecer os detalhes de implementação do serviço. Isso possibilita a criação de clientes automatizados que podem encontrar e utilizar serviços REST para atingir seus objetivos. A longo prazo, esses clientes podem se comunicar e confiar nas tarefas, assim como os humanos. Se adicionarmos padrões de aprendizado a esses clientes, o resultado será uma ou mais IA usando a rede de máquinas em vez de um único parque de servidores. Então, no final, o sonho de Berners Lee: a rede semântica e a inteligência artificial serão realidade. Então, em 2030, terminamos pela Skynet. Até então ... ;-)

inf3rno
fonte
22

A programação da API RESTful (transferência de estado representacional) está gravando aplicativos da web em qualquer linguagem de programação, seguindo 5 princípios básicos de estilo de arquitetura de software :

  1. Recurso (dados, informações).
  2. Identificador global exclusivo (todos os recursos são identificados exclusivamente pelo URI ).
  3. Interface uniforme - use interface simples e padrão (HTTP).
  4. Representação - toda a comunicação é feita por representação (por exemplo, XML / JSON )
  5. Sem estado (cada solicitação ocorre em isolamento completo, é mais fácil armazenar em cache e balancear a carga),

Em outras palavras, você está escrevendo aplicativos simples de rede ponto a ponto sobre HTTP, que usam verbos como GET, POST, PUT ou DELETE implementando a arquitetura RESTful, que propõe padronização da interface que cada "recurso" expõe. Não é nada que usar os recursos atuais da web de maneira simples e eficaz (arquitetura bem-sucedida, comprovada e distribuída). É uma alternativa para mecanismos mais complexos, como SOAP , CORBA e RPC .

A programação RESTful está em conformidade com o design da arquitetura da Web e, se implementada adequadamente, permite tirar o máximo proveito da infraestrutura da Web escalável.

kenorb
fonte
17

Se eu tivesse que reduzir a dissertação original no REST para apenas três frases curtas, acho que o seguinte captura sua essência:

  1. Os recursos são solicitados via URLs.
  2. Os protocolos são limitados ao que você pode se comunicar usando URLs.
  3. Os metadados são passados ​​como pares nome-valor (dados de postagem e parâmetros de sequência de caracteres de consulta).

Depois disso, é fácil entrar em debates sobre adaptações, convenções de codificação e práticas recomendadas.

Curiosamente, não há menção de operações HTTP POST, GET, DELETE ou PUT na dissertação. Essa deve ser a interpretação posterior de alguém de uma "melhor prática" para uma "interface uniforme".

Quando se trata de serviços da Web, parece que precisamos de alguma maneira de distinguir arquiteturas baseadas em WSDL e SOAP, que adicionam uma sobrecarga considerável e, sem dúvida, muita complexidade desnecessária à interface. Eles também exigem estruturas adicionais e ferramentas de desenvolvedor para serem implementadas. Não tenho certeza se REST é o melhor termo para distinguir entre interfaces de senso comum e interfaces excessivamente projetadas, como WSDL e SOAP. Mas precisamos de algo.

Nathan Andelin
fonte
17

REST é um padrão de arquitetura e estilo de gravação de aplicativos distribuídos. Não é um estilo de programação no sentido estrito.

Dizer que você usa o estilo REST é semelhante a dizer que você construiu uma casa em um estilo específico: por exemplo, Tudor ou Vitoriano. Tanto o REST como um estilo de software quanto o Tudor ou o Victorian como um estilo doméstico podem ser definidos pelas qualidades e restrições que os compõem. Por exemplo, o REST deve ter uma separação do Servidor Cliente em que as mensagens são autoexplicativas. As casas no estilo Tudor têm frontões sobrepostos e telhados inclinados com frontões voltados para a frente. Você pode ler a dissertação de Roy para aprender mais sobre as restrições e qualidades que compõem o REST.

O REST, diferentemente dos estilos domésticos, teve dificuldades para ser aplicado de forma consistente e prática. Isso pode ter sido intencional. Deixando sua implementação real até o designer. Portanto, você é livre para fazer o que quiser, desde que atenda às restrições estabelecidas na dissertação que estiver criando sistemas REST.

Bônus:

A web inteira é baseada em REST (ou REST foi baseado na web). Portanto, como desenvolvedor da web, você deve estar ciente disso, embora não seja necessário escrever bons aplicativos da web.

processando
fonte
17

Aqui está o meu esboço básico do REST. Tentei demonstrar o pensamento por trás de cada um dos componentes em uma arquitetura RESTful, para que o entendimento do conceito seja mais intuitivo. Espero que isso ajude a desmistificar o REST para algumas pessoas!

REST (Representational State Transfer) é uma arquitetura de design que descreve como os recursos em rede (ou seja, nós que compartilham informações) são projetados e endereçados. Em geral, uma arquitetura RESTful permite que o cliente (a máquina solicitante) e o servidor (a máquina respondente) possam solicitar a leitura, gravação e atualização de dados sem que o cliente precise saber como o servidor opera e o servidor pode passar de volta sem precisar saber nada sobre o cliente. Ok, legal ... mas como fazemos isso na prática?

  • O requisito mais óbvio é que precisa haver algum tipo de linguagem universal para que o servidor possa dizer ao cliente o que está tentando fazer com a solicitação e que o servidor responda.

  • Mas, para encontrar qualquer recurso específico e depois informar ao cliente onde ele mora, é necessário que haja uma maneira universal de apontar para os recursos. É aqui que entram os URIs (Universal Resource Identifiers); eles são basicamente endereços únicos para encontrar os recursos.

Mas a arquitetura REST não termina aí! Embora o acima exposto atenda às necessidades básicas do que queremos, também queremos ter uma arquitetura que ofereça suporte a tráfego de alto volume, pois qualquer servidor geralmente lida com respostas de vários clientes. Portanto, não queremos sobrecarregar o servidor, lembrando informações sobre solicitações anteriores.

  • Portanto, impomos a restrição de que cada par de solicitação-resposta entre o cliente e o servidor seja independente, o que significa que o servidor não precisa se lembrar de nada sobre solicitações anteriores (estados anteriores da interação cliente-servidor) para responder a uma nova solicitação. Isso significa que queremos que nossas interações sejam apátridas.

  • Para aliviar ainda mais a tensão no servidor de refazer cálculos que já foram feitos recentemente para um determinado cliente, o REST também permite o armazenamento em cache. Basicamente, o armazenamento em cache significa tirar uma captura instantânea da resposta inicial fornecida ao cliente. Se o cliente fizer a mesma solicitação novamente, o servidor poderá fornecer o instantâneo ao cliente, em vez de refazer todos os cálculos necessários para criar a resposta inicial. No entanto, como se trata de um instantâneo, se o instantâneo não tiver expirado - o servidor define um tempo de expiração com antecedência - e a resposta foi atualizada desde o cache inicial (ou seja, a solicitação forneceria uma resposta diferente da resposta em cache) , o cliente não verá as atualizações até que o cache expire (ou o cache seja limpo) e a resposta seja renderizada do zero novamente.

  • A última coisa que você encontrará aqui aqui sobre arquiteturas RESTful é que elas são colocadas em camadas. Na verdade, já discutimos implicitamente esse requisito em nossa discussão sobre a interação entre o cliente e o servidor. Basicamente, isso significa que cada camada em nosso sistema interage apenas com as camadas adjacentes. Portanto, em nossa discussão, a camada do cliente interage com a nossa camada de servidor (e vice-versa), mas pode haver outras camadas de servidor que ajudem o servidor primário a processar uma solicitação com a qual o cliente não se comunica diretamente. Em vez disso, o servidor passa a solicitação conforme necessário.

Agora, se tudo isso soa familiar, então ótimo. O HTTP (Hypertext Transfer Protocol), que define o protocolo de comunicação pela Internet é uma implementação da noção abstrata de arquitetura RESTful (ou uma instância da classe REST se você é um fanático por OOP como eu). Nesta implementação do REST, o cliente e o servidor interagem via GET, POST, PUT, DELETE etc., que fazem parte do idioma universal e os recursos podem ser apontados usando URLs.

Kal
fonte
15

Eu acho que o ponto de descanso é a separação do estado em uma camada superior, enquanto faz uso da Internet (protocolo) como uma camada de transporte sem estado . A maioria das outras abordagens confunde as coisas.

Essa tem sido a melhor abordagem prática para lidar com as mudanças fundamentais da programação na era da Internet. Com relação às mudanças fundamentais, Erik Meijer tem uma discussão em exibição aqui: http://www.infoq.com/interviews/erik-meijer-programming-language-design-effects-purity#view_93197 . Ele resume os cinco efeitos e apresenta uma solução projetando a solução em uma linguagem de programação. A solução também pode ser alcançada no nível da plataforma ou do sistema, independentemente do idioma. O repousante pode ser visto como uma das soluções que tem tido muito sucesso na prática atual.

Com estilo repousante, você obtém e manipula o estado do aplicativo em uma Internet não confiável. Se a operação atual falhar para obter o estado correto e atual, será necessário o princípio de validação zero para ajudar o aplicativo a continuar. Se ele não conseguir manipular o estado, normalmente usa vários estágios de confirmação para manter as coisas corretas. Nesse sentido, o resto não é uma solução completa, ele precisa das funções em outra parte da pilha de aplicativos da web para dar suporte ao seu trabalho.

Dado esse ponto de vista, o estilo restante não está realmente vinculado à Internet ou aplicativo da Web. É uma solução fundamental para muitas das situações de programação. Também não é simples, apenas torna a interface realmente simples e lida com outras tecnologias incrivelmente bem.

Apenas o meu 2c.

Edit: Dois aspectos mais importantes:

minghua
fonte
1
Um ponto de vista do MVC : o blog Rest Worst Practices sugeriu não confundir modelos e recursos . O livro Two Scoops of django sugere que a API Rest é a visualização, e não misturar a lógica de negócios à visualização. O código para o aplicativo deve permanecer no aplicativo.
Minghua
14

Esta é uma "discussão" incrivelmente longa e, no entanto, bastante confusa.

OMI:

1) Não existe programação repousante, sem uma grande junta e muita cerveja :)

2) Representational State Transfer (REST) ​​é um estilo arquitetônico especificado na dissertação de Roy Fielding . Tem uma série de restrições. Se o seu Serviço / Cliente os respeitar, será RESTful. É isso.

Você pode resumir (significativamente) as restrições para:

  • comunicação sem estado
  • respeitar especificações HTTP (se HTTP for usado)
  • comunica claramente os formatos de conteúdo transmitidos
  • use a hipermídia como o mecanismo do estado do aplicativo

Há outro post muito bom que explica bem as coisas.

Muitas respostas copiam / colam informações válidas, misturando-as e adicionando alguma confusão. As pessoas falam aqui sobre níveis, sobre URIs RESTFul (não existe isso!), Aplicam métodos HTTP GET, POST, PUT ... REST não é sobre isso ou não apenas sobre isso.

Por exemplo, links - é bom ter uma API com uma aparência bonita, mas no final o cliente / servidor não se importa realmente com os links que você recebe / envia, é o conteúdo que importa.

No final, qualquer cliente RESTful deve poder consumir qualquer serviço RESTful, desde que o formato do conteúdo seja conhecido.

kalin
fonte
14

Pergunta antiga, maneira nova de responder. Há muitos conceitos errados por aí sobre esse conceito. Eu sempre tento lembrar:

  1. URLs estruturados e métodos / verbos HTTP não são a definição de programação tranqüila.
  2. JSON não é uma programação repousante
  3. A programação RESTful não é para APIs

Eu defino programação repousante como

Um aplicativo é tranqüilo se fornece recursos (sendo a combinação de controles de transições de dados + estado) em um tipo de mídia que o cliente entende

Para ser um programador tranqüilo, você deve tentar criar aplicativos que permitam que os atores façam coisas. Não apenas expondo o banco de dados.

Os controles de transição de estado só fazem sentido se o cliente e o servidor concordarem com uma representação do tipo de mídia do recurso. Caso contrário, não há como saber o que é um controle e o que não é e como executar um controle. IE, se os navegadores não souberem <form>tags em html, não haverá nada para você enviar para o estado de transição no navegador.

Não estou procurando me autopromover, mas expandi essas idéias com grande profundidade em minha palestra http://techblog.bodybuilding.com/2016/01/video-what-is-restful-200.html .

Um trecho da minha palestra é sobre o modelo de maturidade richardson, muitas vezes referido, não acredito nos níveis, você é RESTful (nível 3) ou não, mas o que eu gosto de destacar é o que cada nível faz por você no seu caminho para o RESTful

modelo de maturidade richardson anotado

Chris DaMour
fonte
12

O REST define 6 restrições de arquitetura que tornam qualquer serviço da Web - uma verdadeira API RESTful .

  1. Interface uniforme
  2. Servidor cliente
  3. Sem Estado
  4. Armazenável em cache
  5. Sistema em camadas
  6. Código sob demanda (opcional)

https://restfulapi.net/rest-architectural-constraints/

Jaider
fonte
Fielding acrescentou algumas novas regras APIs RESTful / clientes têm que aderir
Roman Vottner
11

REST === A analogia HTTP não está correta até que você não enfatize o fato de que "DEVE" ser acionado pelo HATEOAS .

O próprio Roy limpou aqui .

Uma API REST deve ser inserida sem conhecimento prévio além do URI inicial (marcador) e conjunto de tipos de mídia padronizados que são apropriados para o público-alvo (ou seja, espera-se que seja entendido por qualquer cliente que possa usar a API). A partir desse ponto, todas as transições de estado do aplicativo devem ser conduzidas pela seleção do cliente de opções fornecidas pelo servidor que estão presentes nas representações recebidas ou implícitas pela manipulação do usuário dessas representações. As transições podem ser determinadas (ou limitadas por) o conhecimento do cliente sobre os tipos de mídia e os mecanismos de comunicação de recursos, os quais podem ser aprimorados imediatamente (por exemplo, código sob demanda).

[Falha aqui implica que informações fora de banda estão gerando interação em vez de hipertexto.]

lokesh
fonte
não responde à pergunta tão bem quanto as outras, mas +1 para obter informações relevantes!
CybeX
Acho que isso também responde à pergunta, mas, por exemplo, falta apátrida. Todas as restrições são importantes ... A parte do tipo de mídia padrão nem sempre é verdadeira. Quero dizer, existem camadas de entendimento. Por exemplo, se você usa RDF, o tipo de mídia pode ser entendido, mas o significado do conteúdo não. Portanto, o cliente precisa conhecer o vocabulário também. Algumas pessoas estão experimentando este tipo de APIs REST e um vocabulário RESTO geral para descrever hyperlinks, etc. hydra-cg.com
inf3rno
11

REST é um estilo arquitetural baseado em padrões da web e no protocolo HTTP (introduzido em 2000).

Em uma arquitetura baseada em REST, tudo é um recurso (Usuários, Pedidos, Comentários). Um recurso é acessado através de uma interface comum, com base nos métodos padrão HTTP (GET, PUT, PATCH, DELETE etc).

Em uma arquitetura baseada em REST, você possui um servidor REST que fornece acesso aos recursos. Um cliente REST pode acessar e modificar os recursos REST.

Todo recurso deve suportar as operações comuns do HTTP. Os recursos são identificados por IDs globais (que normalmente são URIs).

O REST permite que os recursos tenham representações diferentes, por exemplo, texto, XML, JSON etc. O cliente REST pode solicitar uma representação específica por meio do protocolo HTTP (negociação de conteúdo).

Métodos HTTP:

Os métodos PUT, GET, POST e DELETE são normalmente usados ​​em arquiteturas baseadas em REST. A tabela a seguir fornece uma explicação dessas operações.

  • GET define um acesso de leitura do recurso sem efeitos colaterais. O recurso nunca é alterado por meio de uma solicitação GET, por exemplo, a solicitação não tem efeitos colaterais (idempotente).
  • PUT cria um novo recurso. Também deve ser idempotente.
  • DELETE remove os recursos. As operações são idempotentes. Eles podem ser repetidos sem levar a resultados diferentes.
  • O POST atualiza um recurso existente ou cria um novo recurso.
Imran Ahmad
fonte
Várias citações, mas nenhuma fonte mencionada. Onde você conseguiu isso?
djvg
10

REST significa transferência de estado representacional .

Ele se baseia em um protocolo de comunicações armazenável em cache, sem estado e servidor-estado - e em praticamente todos os casos, o protocolo HTTP é usado.

O REST é frequentemente usado em aplicativos móveis, sites de redes sociais, ferramentas de mashup e processos de negócios automatizados. O estilo REST enfatiza que as interações entre clientes e serviços são aprimoradas por ter um número limitado de operações (verbos). A flexibilidade é fornecida pela atribuição de recursos (substantivos) aos seus próprios URIs (Indicadores Universal de Recursos).

Introdução sobre o Rest

GowriShankar
fonte
10

Falar é mais do que simplesmente trocar informações . Um protocolo é realmente projetado para que nenhuma conversa tenha que ocorrer. Cada parte sabe qual é o seu trabalho específico, porque é especificado no protocolo. Os protocolos permitem a troca pura de informações em detrimento de alterações nas ações possíveis. Falar, por outro lado, permite que uma parte pergunte que outras ações podem ser tomadas pela outra parte. Eles podem até fazer a mesma pergunta duas vezes e obter duas respostas diferentes, pois o Estado da outra parte pode ter mudado nesse meio tempo. Falar é arquitetura RESTful . A tese de Fielding especifica a arquitetura que seria necessário seguir se quisesse permitir que as máquinas conversassem entre si em vez de simplesmentecomunicar .

qmckinsey
fonte
10

Não existe noção de "programação RESTful" por si só. Seria melhor chamado de paradigma RESTful ou ainda melhor arquitetura RESTful. Não é uma linguagem de programação. É um paradigma.

Da Wikipedia :

Na computação, a transferência de estado representacional (REST) ​​é um estilo de arquitetura usado para o desenvolvimento da web.

ACV
fonte
9

O ponto importante é que, se concordarmos em usar uma linguagem comum para operações básicas (os verbos http), a infraestrutura poderá ser configurada para entendê-los e otimizá-los adequadamente, por exemplo, usando cabeçalhos de cache para implementar o cache. níveis.

Com uma operação GET tranquila implementada corretamente, não importa se as informações vêm do banco de dados do servidor, do memcache do servidor, de uma CDN, do cache de um proxy, do cache do navegador ou do armazenamento local do navegador. A fonte atualizada em jejum e mais prontamente disponível pode ser usada.

Dizer que Rest é apenas uma mudança sintática do uso de solicitações GET com um parâmetro de ação para o uso dos verbos http disponíveis faz com que pareça que não tem benefícios e é puramente cosmético. O objetivo é usar uma linguagem que possa ser entendida e otimizada por todas as partes da cadeia. Se a sua operação GET tiver uma ação com efeitos colaterais, você precisará pular todo o cache HTTP ou obter resultados inconsistentes.

Benoit Essiambre
fonte
5
"Dizer que Descanse é apenas uma mudança sintática ... faz com que pareça que não tem benefícios e é puramente cosmético" - é exatamente por isso que estou lendo respostas aqui no SO. Observe que você não explicou por que o REST não é puramente cosmético.
Osa
5

O que é teste de API ?

O teste da API utiliza programação para enviar chamadas para a API e obter o rendimento. O teste considera o segmento em teste como uma caixa preta. O objetivo do teste da API é confirmar a execução correta e o erro da parte que precede sua coordenação em um aplicativo.

API REST

REST: Transferência de Estado Representacional.

  • É um arranjo de funções nas quais os testadores executam solicitações e recebem respostas. Na API REST, as interações são feitas via protocolo HTTP.
  • O REST também permite a comunicação entre computadores entre si através de uma rede.
  • Para enviar e receber mensagens, envolve o uso de métodos HTTP e não requer uma definição estrita de mensagem, diferentemente dos serviços da Web.
  • As mensagens REST geralmente aceitam o formulário no formato XML ou JavaScript Object Notation (JSON).

4 métodos de API comumente usados: -

  1. GET: - Fornece acesso somente leitura a um recurso.
  2. POST: - É usado para criar ou atualizar um novo recurso.
  3. PUT: - É usado para atualizar ou substituir um recurso existente ou criar um novo recurso.
  4. DELETE: - É usado para remover um recurso.

Etapas para testar a API manualmente: -

Para usar a API manualmente, podemos usar plug-ins de API REST baseados em navegador.

  1. Instale o plug-in POSTMAN (Chrome) / REST (Firefox)
  2. Digite o URL da API
  3. Selecione o método REST
  4. Selecionar cabeçalho do conteúdo
  5. Inserir JSON de solicitação (POST)
  6. Clique em enviar
  7. Ele retornará resposta de saída

Etapas para automatizar a API REST

kkashyap1707
fonte
5
isso não é ainda uma resposta adequada
therealprashant
5

Isso é muito menos mencionado em todos os lugares, mas o Modelo de Maturidade de Richardson é um dos melhores métodos para realmente julgar como Restful é a API. Mais sobre isso aqui:

Modelo de Maturidade de Richardson

Krishna Ganeriwal
fonte
Se você observar as restrições impostas pelo Fielding ao REST, verá claramente que uma API precisa ter atingido a Camada 3 do RMM para ser vista como RESTful, embora isso simplesmente não seja suficiente, na verdade, pois ainda existem possibilidades suficientes para falhar no Ideia REST - a dissociação de clientes das APIs do servidor. Claro, a camada 3 cumpre a restrição HATEOAS mas ainda é fácil de quebrar as exigências e aos clientes casal firmemente a um servidor (ou seja, usando recursos digitadas)
Roman Vottner
2

Eu diria que um componente importante no entendimento do REST está nos pontos finais ou mapeamentos, como /customers/{id}/balance.

Você pode imaginar um ponto de extremidade como o pipeline de conexão do site (front-end) ao seu banco de dados / servidor (back-end). Utilizando-os, o front-end pode executar operações de back-end definidas nos métodos correspondentes de qualquer mapeamento REST no seu aplicativo.

Kürsat Aydinli
fonte