Eu tenho alguns serviços da web que desejo chamar. $resource
ou $http
qual deles devo usar?
$resource
: https://docs.angularjs.org/api/ngResource/service/$resource
$http
: https://docs.angularjs.org/api/ng/service/$http
Depois de ler as duas páginas acima da API, estou perdido.
Poderia me explicar em inglês simples qual é a diferença e em que situação devo usá-las? Como estruturar essas chamadas e ler os resultados em objetos js corretamente?
Respostas:
$http
é para uso geral AJAX. Na maioria dos casos, é isso que você usará. Com$http
você vai estar fazendoGET
,POST
,DELETE
tipo chama manualmente e processar os objetos que o retorno sobre o seu próprio.$resource
Wraps$http
para uso em cenários de API da web RESTful.Falando muito em geral: web service A RESTful será um serviço com um ponto de extremidade para um tipo de dados que faz coisas diferentes com esse tipo de dados com base em HTTP métodos como
GET
,POST
,PUT
,DELETE
, etc. Assim, com um$resource
, você pode chamar umGET
para obter o recurso como um objeto JavaScript, altere-o e envie-o de volta com aPOST
, ou mesmo exclua-o comDELETE
.... se isso faz sentido.
fonte
$resource
serviço só seria idiomática / bom se suas sustentações terminal RESTGET
,POST
, eDELETE
? Os documentos ( docs.angularjs.org/api/ngResource.$resource ) mostram que você obtém esses três métodos REST$resource
.PUT
ou qualquer outra coisa que desejarGET
,POST
eDELETE
são apenas padrões. Se você possui um terminal que lida com o mesmo recurso (isso é importante) para mais de um método HTTP,$resource
é uma boa opção..$promise
funciona bemresolve
para roteamento e ligação.Eu sinto que outras respostas, embora corretas, não explicam bem a raiz da pergunta:
REST
é um subconjunto deHTTP
. Isso significa que tudo o que pode ser feito viaREST
pode ser feito via,HTTP
mas nem tudo o que pode ser feito viaHTTP
pode ser feito viaREST
. É por isso que$resource
usa$http
internamente.Então, quando usar um ao outro?
Se tudo o que você precisa é
REST
, você está tentando acessar um serviço daRESTful
web,$resource
isso facilita a interação com esse serviço da Web.Se, em vez disso, você estiver tentando acessar QUALQUER COISA que não seja um serviço da
RESTful
Web, precisará seguir com isso$http
. Lembre-se de que você também pode acessar um serviço daRESTful
Web via$http
, ele será muito mais complicado do que com ele$resource
. É assim que a maioria das pessoas faz fora do AngularJS, usandojQuery.ajax
(equivalente ao Angular$http
).fonte
$http
faz uma chamada AJAX de uso geral, na qual geral significa que pode incluir API RESTful mais API não RESTful .e
$resource
é especializado para essa parte RESTful .Restful Api veio a prevalecer nos últimos anos porque o URL é melhor organizado em vez do URL aleatório composto pelos programadores.
Se eu usar uma API RESTful para construir o URL, seria algo como
/api/cars/:carId
.$resource
maneira de buscar dadosIsto lhe dará um objeto de recurso , que é acompanhado com
get
,save
,query
,remove
,delete
métodos automaticamente.$http
maneira de buscar dadosVeja como precisamos definir cada operação comum na API RESTFul . Também uma diferença é que
$http
retornapromise
enquanto$resource
retorna um objeto. Também existem plugins de terceiros para ajudar o Angular a lidar com a API RESTFul como restangularSe a API é algo parecido
/api/getcarsinfo
. Tudo o que resta para nós é usar$http
.fonte
/api/getcarsinfo
que eu acho que nós ainda pode usar$resource
Acho que a resposta depende mais de quem você é no momento em que está escrevendo o código. Use
$http
se você é novo na Angular, até saber por que precisa$resource
. Até que você tenha uma experiência concreta de como o$http
está impedindo e compreenda as implicações do uso$resource
no seu código , fique com ele$http
.Esta foi a minha experiência: iniciei meu primeiro projeto Angular, precisava fazer solicitações HTTP para uma interface RESTful, então fiz a mesma pesquisa que você está fazendo agora. Com base na discussão que li em perguntas como essa, escolhi seguir em frente
$resource
. Foi um erro que eu gostaria de desfazer. Aqui está o porquê:$http
exemplos são abundantes, úteis e geralmente exatamente o que você precisa.$resource
Exemplos claros são escassos e (na minha experiência) raramente tudo o que você precisa. Para o novato no Angular, você não perceberá as implicações de sua escolha até mais tarde, quando estiver confuso com a documentação e com raiva por não encontrar$resource
exemplos úteis para ajudá-lo.$http
é provavelmente um mapa mental 1 para 1 do que você está procurando. Você não precisa aprender um novo conceito para entender com o que se relaciona$http
.$resource
traz muitas nuances para as quais você ainda não tem um mapa mental.$http
retorna uma promessa e é.then
capaz, por isso se encaixa perfeitamente nas novas coisas que você está aprendendo sobre a Angular e as promessas.$resource
, que não retorna uma promessa diretamente, complica sua tentativa de entender os fundamentos angulares.$resource
é poderoso porque condensa o código para chamadas RESTful CRUD e as transformações para entrada e saída. Isso é ótimo se você está cansado de escrever código repetidamente para processar os resultados$http
. Para qualquer outra pessoa,$resource
adiciona uma camada enigmática de sintaxe e passagem de parâmetro que é confusa.Eu gostaria de me conhecer há três meses e estaria enfaticamente dizendo a mim mesma: "Fique com a
$http
criança. Está tudo bem".fonte
/user/:userId
ou/thing
. Depois de mudar para/users/roles/:roleId
, você precisará modificar o URL e os parâmetros $ resource por base de verbo e poderá usar o $ http nesse momento.$resource
e mudar para alguns$http
lugares. Não posso enfatizar o suficiente o quanto gostaria de desejar nunca ter conhecido$resource
. Provavelmente perdi mais de uma semana perseguindo as nuances de$resource
mais de um mês.$http
é tão fácil e direto que qualquer ganho a ser obtido$resource
foi completamente eliminado pela curva de aprendizado.Eu acho que é importante enfatizar que $ resource espera objeto ou array como resposta do servidor, não como string não processada. Portanto, se você tiver uma sequência bruta (ou qualquer coisa, exceto objeto e matriz) como resposta, precisará usar $ http
fonte
Quando se trata de escolher entre
$http
ou$resource
tecnicamente falando, não há uma resposta certa ou errada em essência, ambos farão o mesmo.O objetivo de
$resource
é permitir que você passe uma sequência de modelo (uma sequência que contém espaços reservados) junto com os valores dos parâmetros.$resource
substituirá os espaços reservados da string de modelo pelos valores dos parâmetros que estão sendo passados como um objeto. Isso é útil principalmente ao interagir com a fonte de dados RESTFul, pois eles usam princípios semelhantes para definir os URLs.O que
$http
faz é executar as solicitações HTTP assíncronas.fonte
$resource
que não pode executar de forma assíncrona? Apenas queria esclarecer$http
é a maneira mais simples de executar um assíncrono solicitações HTTP eo que$resource
faz essencialmente a mesma, mas com parâmetros diferentesO serviço de recursos é apenas um serviço útil para trabalhar com REST APSIs. quando você o usa, não escreve seus métodos CRUD (criar, ler, atualizar e excluir)
Na minha opinião, o serviço de recursos é apenas um atalho, você pode fazer qualquer coisa com o serviço http.
fonte
$http.get('/path/to/thing', params)
versus versusmyResource.get(params)
realmente fazendo a configuração paramyResource
. Mais código na frente e realmente funciona muito bem com o mesmo substantivo da API. Caso contrário, você está codificando tanto quanto se usasse $ http.Uma coisa que notei ao usar $ resource sobre $ http é se você estiver usando Web API em .net
O recurso $ está vinculado a um controlador que executa uma única finalidade.
$ resource ('/ user /: userId', {userId: '@ id'});
Enquanto $ http pode ser de qualquer coisa. basta especificar o URL.
$ http.get - "API / autenticação"
é apenas a minha opinião.
fonte
O serviço de recursos $ atualmente não suporta promessas e, portanto, possui uma interface distintamente diferente do serviço $ http.
fonte
var myResource = $resource(...config...);
, em seguida, em outro lugar no serviço que você fazreturn myResource.get(..params...)
ou você pode fazêvar save = myResource.save(); save.$promise.then(...fn...); return save;