// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Trilha de Aprendizado de Web Services
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Trilha de Aprendizado de Web Services - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Trilha de Aprendizado de Web Services


== *O que são Web Services?*

Os Web services são componentes de aplicação distribuídos que estão disponíveis externamente. Você pode usá-los para integrar aplicações de computador que são escritas em linguagens diferentes e executadas em plataformas diferentes. Os Web services são independentes de linguagem e de plataforma porque os fornecedores concordaram em oferecer padrões de Web service comuns.

As aplicações de Web service são implantadas em um servidor de aplicações Java EE, tal como o GlassFish Server/Servidor de Aplicações do Sistema Sun Java.

Essa página fornece links para alguns dos documentos e recursos do NetBeans que podem ajudá-lo a aprender a desenvolver aplicações de Web service com o NetBeans IDE.

== Conceitos Básicos 

* link:../docs/websvc/intro-ws.html[+Introdução aos Web Services+]

== Tutoriais e Artigos

=== Web Services SOAP

* link:../docs/websvc/jax-ws.html[+Introdução aos Web Services JAX-WS+]
* link:../docs/websvc/client.html[+Desenvolvendo Clientes de Web Service JAX-WS+]
* Passando Dados Binários no SOAP: um tutorial em cinco partes
** link:../docs/websvc/flower_overview.html[+Parte 1: Visão Geral+]
** link:../docs/websvc/flower_ws.html[+Parte 2: Criando o Web Service+]
** link:../docs/websvc/flower-code-ws.html[+Parte 3: Codificando e Testando o Web Service+]
** link:../docs/websvc/flower_wsdl_schema.html[+Parte 4: Modificando o Esquema e os Arquivos WSDL+]
** link:../docs/websvc/flower_swing.html[+Parte 5: Criando o Cliente Swing+]

=== Web Services RESTful

* link:../docs/websvc/rest.html[+Introdução ao RESTful Web Services+]
* link:http://netbeans.dzone.com/nb-generate-simpler-rest[+DZone: NetBeans IDE para Gerar Web Services RESTful Mais Simples+]
* link:http://netbeans.dzone.com/nb-smugmug-client[+DZone: Cliente SmugMug em Java com NetBeans IDE+]
* link:http://netbeans.dzone.com/articles/how-to-combine-rest-and-ejb-31[+DZone: Como Combinar Serviços REST com o EJB 3.1+]

=== Software Como um Serviço (SaaS)

* link:../docs/websvc/zillow.html[+SaaS: Zillow+]

=== Documentos de Contribuição da Comunidade

* link:http://netbeans.dzone.com/nb-hierarchical-web-services[+Desenvolvimento Hierárquico de Web Service com o NetBeans IDE+], de Jayasurya Venug
* link:http://buttso.blogspot.com/2011/02/using-jax-rs-with-weblogic-server-1034.html[+Blog de Steve Button: Using JAX-RS [and NetBeans IDE] With WebLogic Server 10.3.4 (Usando JAX-RS - e NetBeans IDE - com o WebLogic Server 10.3.4)+]
* link:http://www.adam-bien.com/roller/abien/entry/simplest_possible_ejb_3_13[+O componente EJB 3.1/REST (JSR 311) Mais Simples Possível+], de Adam Bien
* link:http://wiki.netbeans.org/TransformingSOAPMessagesWithXSLT[+Transformando Mensagens SOAP com XSLT+], de Siegfried Bolz
* link:http://wiki.netbeans.org/JavaClientForDeliciousUsingNetBeans[+Criando um Cliente Java para RESTful Web Services del.icio.us+], de Amit Kumar Saha
* link:http://wiki.netbeans.org/SOAPclientForOpenCalais[+Cliente SOAP para Open Calais+], de Amit Kumar Saha

=== Screencasts

* link:../docs/websvc/pet-catalog-screencast.html[+Catálogo Pet de Web Services RESTful - NetBeans IDE 6.5+]
* java.net: link:http://download.java.net/javaee5/screencasts/metro-nb6/[+Web Services Protegidos e Confiáveis usando Metro/GlassFish+]
* YouTube: link:http://youtube.com/watch?v=K8OtFD6RLMM[+SOCRADES: Demonstração de Web Services em Dispositivos Sun SPOT+]

== Outros Recursos

=== _Desenvolvendo Aplicações com o NetBeans IDE_ Guia do Usuário

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG1842[+Desenvolvendo e Protegendo Web Services+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG1035[+Desenvolvendo Aplicações Web+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG1216[+Desenvolvendo Aplicações Corporativas+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG1649[+Trabalhando com Servidores Web e Servidores de Aplicações+]

=== Perguntas Frequentes

* link:http://wiki.netbeans.org/NetBeansUserFAQ#section-NetBeansUserFAQ-WebServicesDevelopment[+Perguntas Frequentes sobre o Desenvolvimento de Web Services+]

=== Tutoriais e Outras Documentações

* link:https://weblogs.java.net/blog/caroljmcdonald/archive/2013/09/16/example-backbonejs-jax-rs-jpa-application[+Exemplo Backbone.js , JAX-RS, Aplicação JPA+]
* link:http://coenraets.org/blog/2011/12/restful-services-with-jquery-and-java-using-jax-rs-and-jersey/[+Services RESTful com JQuery e Java Utilizando o JAX-RS e Jersey+]
* link:https://glassfish.java.net/[+Participe da Comunidade GlassFish +]
* link:http://www.mysql.com/why-mysql/java/[+MySQL e Java: Recursos+]
* link:http://java.dzone.com/news/5-techniques-create-web-servic[+5 Técnicas para Criar Serviços Java Web de WSDL+]
* link:http://netbeans.dzone.com/news/spring-framework-support-rest-[+Suporte ao Framework Spring no Jersey REST 0.7+]
* link:http://netbeans.dzone.com/news/advanced-web-service-interoper[+Interoperabilidade Avançada do Web Service de um Modo Fácil+]
* link:http://netbeans.dzone.com/news/getting-started-with-software-[+Introdução ao "Software como um Serviço"+]

=== Blogs

* link:http://javaevangelist.blogspot.com/[+Blog de John Yeary: Web Services on NetBeans IDE (Web Services no NetBeans IDE)+]
* link:http://www.java.net/blogs/caroljmcdonald/[+Carol McDonald: Java EE+]
* link:http://blogs.oracle.com/japod/[+Blog de Jakub Podlasek: Jersey RESTful Web Services (Web Services RESTful no Jersey)+]
* link:http://blogs.oracle.com/geertjan/[+Geertjan Wielenga: Plataforma do NetBeans IDE+]
