Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Web,mais
precisamente,umestiloarquiteturalqueconsistedeumconjuntocoordenadode
restriesarquiteturais
aplicadasacomponentes,conectoreseelementosdedadosdentrodeumsistemade
hipermdiadistribudo.
ORESTignoraosdetalhesdaimplementaodecomponenteeasintaxedeprotocolocom
oobjetivodefocar
nospapisdoscomponentes,nasrestriessobresuainteraocomoutroscomponentes
enasuainterpretao
deelementosdedadossignificantes.
ElefoidefinidooficialmentepelaW3C.
ElefrequentementeaplicadowebservicesfornecendoAPIsparaacessoaumservio
qualquernaweb.Ele
usaintegralmenteasmensagensHTTPparasecomunicaratravsdoquejdefinidono
protocolosemprecisar
"inventar"novosprotocolosespecficosparaaquelaaplicao.
Voctrabalhaessencialmentecomcomponentes,conectoresedados.
EleusaoprotocoloHTTP(verbos,acceptheaders,cdigosdeestadoHTTP,Content
Type)
deformaexplcitae
representativaparasecomunicar.URIssousadosparaexporaestruturadoservio.
Utilizaumanotao
comumparatransfernciadedadoscomoXMLouJSON.
Nopossuiestadoentreessascomunicaes,ouseja,cadacomunicaoindependente
euniforme
(padronizada)precisandopassartodainformaonecessria.
Eledevefacilitarocachedecontedonocliente.
Deveterclaradefiniodoquefazpartedoclienteedoservidor.Oclientenoprecisa
sabercomooservidor
armazenadados,porexemplo.Assimcadaimplementaonodependedaoutraese
tornamaisescalvel.
Permiteousoemcamadastambmfacilitandoaescalabilidade,confiabilidadeesegurana.
Frequentementecriadocomalgumaformadeextensibilidade.
Falhandoemumdoscincoprimeirositens,aarquiteturanopodeserclassificada
formalmentecomoRESTful.
Masnemtodomundoseapegaaoformalismo.
ExemplosimplesdeCRUD.
Primeiroaentidade,umbeancontendoasinformaesp.aramanipulao:
packagerestful.web.service.models
importjavax.xml.bind.annotation.XmlRootElement
@XmlRootElement
publicclassPessoa{
privateStringnome
privateintidade
privateintcpf
publicStringgetNome(){
returnnome}
publicvoidsetNome(Stringnome){
this.nome=nome}
publicintgetIdade(){
returnidade}
publicvoidsetIdade(intidade){
this.idade=idade}
publicintgetCpf(){
returncpf}
publicvoidsetCpf(intcpf){
this.cpf=cpf}
}
AgoraoWebResourceparaBuscarInformaesquandoforrequisitado.
packagerestful.web.service.resources
importjava.util.ArrayList
importjava.util.HashMap
importjava.util.List
importjava.util.Map
importjavax.ws.rs.Consumes
importjavax.ws.rs.DELETE
importjavax.ws.rs.GET
importjavax.ws.rs.POST
importjavax.ws.rs.PUT
importjavax.ws.rs.Path
importjavax.ws.rs.PathParam
importjavax.ws.rs.Produces
importrestful.web.service.models.Pessoa
@Path("/pessoas")
publicclassPessoaResource{
//UtilizandoMapestaticoparasimulaodebasededados
staticprivateMap<Integer,Pessoa>pessoasMap
static{
pessoasMap=newHashMap<Integer,Pessoa>()
Pessoap1=newPessoa()
p1.setCpf(38745623216)
p1.setNome("Joo")
p1.setIdade(25)
pessoasMap.put(p1.getCpf(),p1)
Pessoap2=newPessoa()
p2.setCpf(22341232342)
p2.setNome("Maria")
p2.setIdade(30)
pessoasMap.put(p2.getCpf(),p2)
}
@GET
@Produces("text/xml")
publicList<Pessoa>getPessoas(){
returnnewArrayList<Pessoa>(pessoasMap.values())
}
//listarapenasumapessoa
@Path("{cpf}")
@GET
@Produces("text/xml")
publicPessoagetPessoa(@PathParam("cpf")intcpf){
returnpessoasMap.get(cpf)
}
//adicionarpessoa
@POST
@Consumes("text/xml")
@Produces("text/plain")
publicStringadicionaPessoa(Pessoapessoa){
pessoasMap.put(pessoa.getCpf(),pessoa)
returnpessoa.getNome()+"adicionado."
}
//removerpessoa
@Path("{cpf}")
@DELETE
@Produces("text/plain")
publicStringremovePessoa(@PathParam("cpf")intcpf){
pessoasMap.remove(cpf)
return"Pessoaremovida."
}
//atualizarpessoa
@Path("{cpf}")
@PUT
@Consumes("text/xml")
@Produces("text/plain")
publicStringatualizaPessoa(Pessoapessoa,@PathParam("cpf")intcpf){
Pessoaatual=pessoasMap.get(cpf)
atual.setNome(pessoa.getNome())
atual.setIdade(pessoa.getIdade())
returnpessoa.getNome()+"atualizada."
}