Etiqueta: visualeditor
Etiqueta: visualeditor
 
(4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 219: Linha 219:
</manifest>
</manifest>
</syntaxhighlight>
</syntaxhighlight>
https://github.com/Sensedia
https://github.com/Sensedia/apix2017-microservice-products


= Funcionamento =
= Funcionamento =
O funcionamento da Tecnologia é dado a partir da chave, chamada API KEY, dado pelo fornecedor da API, como está no primeiro código de exemplo acima. A partir disso, a API pode ter ou não interface, dependendo de qual é utilizada.
O funcionamento da Tecnologia é dado a partir da chave, chamada API KEY, dado pelo fornecedor da API, como está no primeiro código de exemplo acima. A partir disso, a API pode ter ou não interface, dependendo de qual é utilizada.
Para ela ser criada, existe o estilo REST de construção de web services, bem como as melhores práticas comumente adotadas na criação de uma RESTful API. Essa forma é útil para desenvolvedores que precisem criar uma API pública ou privada para expor dados e funcionalidades de um sistema web para outras aplicações, sejam elas web, mobile ou desktop.
O REST é mais simples que o SOAP. Foi projetado para ser usado em clientes “magros”, o que o torna ideal para utilização em dispositivos com capacidades limitadas. As respostas do REST são cacheáveis, diferente do SOAP. Isso dá um grande aumento de performance em clientes simples.
Enquanto o SOAP utiliza apenas XML, o REST pode se comunicar através de diversos formatos, sendo JSON o mais usado. Por ser um formato menos verboso e normalmente menor, a transferência de dados com o uso de JSON causa uma carga menor na rede, além de ser mais facilmente consumido por clientes construídos com qualquer linguagem, em especial HTML5.
O estilo REST é formado por um conjunto de regras no topo do protocolo HTTP que foram comunicadas pela primeira vez por Roy Fielding em sua tese de doutorado. Depois de seu surgimento, começou a se tornar uma alternativa mais leve de comunicação entre computadores (cliente e servidor).  Para ser considerado REST, o web service deve ser ou possuir: Interface uniforme, Stateless, Cacheável, Cliente-Servidor, Sistema em camadas e Código sob demanda.
=== Interface Uniforme ===
Para ser considerado REST, o web service deve ser ou possuir: Interface uniforme, Stateless, Cacheável, Cliente-Servidor, Sistema em camadas e Código sob demanda. Veremos em detalhes cada uma delas a seguir.
O REST deverá ser baseado em recursos identificados por URLs. Diferente de SOAP, que é baseado em ações, como “obter produto”, o REST é baseado no recurso, deixando a definição das ações para os métodos HTTP. Portanto, quando quisermos obter um recurso, como um produto, faremos uma requisição GET para a URL que o localiza.
é importante entendermos que as URLs serão definidas por substantivos e não por verbos, salvo quando for necessário fazer algum cálculo ou algo que não esteja vinculado a um recurso no servidor. O motivo disso é bem simples: tornar a interface simples. A '''Listagem 1''' mostra exemplos de URLs para um recurso Produto que não seguem esse padrão e a '''Listagem 2''' mostra exemplos que o seguem.
'''Listagem 1.''' Exemplos de URL que não seguem os princípios do REST.
 
  /listarProdutos = URL para listar todos os produtos
  /obterProduto/1 = URL para obter o produto 1
  /criarProduto = URL para criar produto
  /deletarProduto = URL para deletar produto
'''Listagem 2.''' Exemplos de URL que seguem os princípios do REST.
 
  /produtos = URL para ações sobre recursos do tipo Produto
  /produtos/1 = URL para ações sobre um produto específico
As ações são definidas utilizando os métodos do protocolo HTTP: GET, POST, PUT, DELETE e HEAD.


= Software =
= Software =
Linha 231: Linha 259:


= Topologia ou Esquema funcional =
= Topologia ou Esquema funcional =
<gallery>
* https://cms-assets.tutsplus.com/uploads/users/487/posts/22543/image/real-life-architecture-png.png
real-life-architecture-png.png|teste
</gallery>
[[Arquivo:real-life-architecture-png.png|thumb|452x452px|Como funciona a API]]


= Conexões =
= Conexões =

Edição atual tal como às 21h54min de 16 de outubro de 2017

Especificação técnica

API é um acrônimo de Application Programming Interface, Interface de Programação de Aplicação, traduzindo ao português. Ela é composta de informações que podem ser utilizadas para extrair dados de um certo local e transportá-los para outro local, definindo comportamentos específicos de determinados objetos em uma interface para outras aplicações, para isso é necessário integrar com um software entrando com chave de acesso para ser permitido o fluxo de dados.


Código fonte de exemplo

Exemplo de código chave da API do Google Maps:

<syntaxhighlight>

    <meta-data         android:name="com.google.android.geo.API_KEY"         android:value="BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75"/> </syntaxhighlight> Exemplo de uma configuração de um projeto:<syntaxhighlight>

  1. Proguard config for the demo project.
  1. This file only contains the proguard options required by the Google Maps
  2. Android API v2. It should be used in addition to the one provided by the
  3. Android SDK (<sdk>/tools/proguard/proguard-android-optimize.txt).
  4. For more details on the use of proguard in Android, please read:
  5. http://proguard.sourceforge.net/manual/examples.html#androidapplication

-optimizations !code/simplification/variable

-keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends android.support.v4.app.Fragment

  1. The Maps API uses custom Parcelables.
  2. Use this rule (which is slightly broader than the standard recommended one)
  3. to avoid obfuscating them.

-keepclassmembers class * implements android.os.Parcelable {

   static *** CREATOR;

}

  1. The Maps API uses serialization.

-keepclassmembers class * implements java.io.Serializable {

   static final long serialVersionUID;
   static final java.io.ObjectStreamField[] serialPersistentFields;
   private void writeObject(java.io.ObjectOutputStream);
   private void readObject(java.io.ObjectInputStream);
   java.lang.Object writeReplace();
   java.lang.Object readResolve();

} </syntaxhighlight> Exemplo do main da API do Google Maps:<syntaxhighlight lang="xml" line="1"> <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"

   package="com.example.mapdemo" >
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
   <uses-permission
       android:name="android.permission.WRITE_EXTERNAL_STORAGE"
       android:maxSdkVersion="22" />
   <uses-permission
       android:name="android.permission.READ_EXTERNAL_STORAGE"
       android:maxSdkVersion="22" />
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/demo_title"
       android:supportsRtl="true"
       android:theme="@style/AppTheme" >
       <meta-data
           android:name="com.google.android.geo.API_KEY"
           android:value="@string/google_maps_key" />
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN"/>
               <category android:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>
       <activity
           android:name=".BasicMapDemoActivity"
           android:label="@string/basic_map_demo_label"/>
       <activity
           android:name=".CameraDemoActivity"
           android:label="@string/camera_demo_label"/>
       <activity
           android:name=".CameraClampingDemoActivity"
           android:label="@string/camera_clamping_demo_label"/>
       <activity
           android:name=".CircleDemoActivity"
           android:label="@string/circle_demo_label"/>
       <activity
           android:name=".EventsDemoActivity"
           android:label="@string/events_demo_label"/>
       <activity
           android:name=".GroundOverlayDemoActivity"
           android:label="@string/ground_overlay_demo_label"/>
       <activity
           android:name=".IndoorDemoActivity"
           android:label="@string/indoor_demo_label"/>
       <activity
           android:name=".LayersDemoActivity"
           android:label="@string/layers_demo_label"/>
       <activity
           android:name=".LiteDemoActivity"
           android:label="@string/lite_demo_label"/>
       <activity
           android:name=".LiteListDemoActivity"
           android:label="@string/lite_list_demo_label"/>
       <activity
           android:name=".LocationSourceDemoActivity"
           android:label="@string/location_source_demo_label"/>
       <activity
           android:name=".MapInPagerDemoActivity"
           android:label="@string/map_in_pager_demo_label"/>
       <activity
           android:name=".MarkerDemoActivity"
           android:label="@string/marker_demo_label"/>
       <activity
           android:name=".MarkerCloseInfoWindowOnRetapDemoActivity"
           android:label="@string/marker_close_info_window_on_retap_demo_label"/>
       <activity
           android:name=".MultiMapDemoActivity"
           android:label="@string/multi_map_demo_label"/>
       <activity
           android:name=".MyLocationDemoActivity"
           android:label="@string/my_location_demo_label"/>
       <activity
           android:name=".OptionsDemoActivity"
           android:label="@string/options_demo_label"/>
       <activity
           android:name=".PolygonDemoActivity"
           android:label="@string/polygon_demo_label"/>
       <activity
           android:name=".PolylineDemoActivity"
           android:label="@string/polyline_demo_label"/>
       <activity
           android:name=".ProgrammaticDemoActivity"
           android:label="@string/programmatic_demo_label"/>
       <activity
           android:name=".RawMapViewDemoActivity"
           android:label="@string/raw_map_view_demo_label"/>
       <activity
           android:name=".RetainMapDemoActivity"
           android:label="@string/retain_map_demo_label"/>
       <activity
           android:name=".SaveStateDemoActivity"
           android:label="@string/save_state_demo_label"/>
       <activity
           android:name=".SnapshotDemoActivity"
           android:label="@string/snapshot_demo_label"/>
       <activity
           android:name=".SplitStreetViewPanoramaAndMapDemoActivity"
           android:label="@string/split_street_view_panorama_and_map_demo_label"/>
       <activity
           android:name=".StreetViewPanoramaBasicDemoActivity"
           android:label="@string/street_view_panorama_basic_demo_label"/>
       <activity
           android:name=".StreetViewPanoramaEventsDemoActivity"
           android:label="@string/street_view_panorama_events_demo_label"/>
       <activity
           android:name=".StreetViewPanoramaNavigationDemoActivity"
           android:label="@string/street_view_panorama_navigation_demo_label"/>
       <activity
           android:name=".StreetViewPanoramaOptionsDemoActivity"
           android:label="@string/street_view_panorama_options_demo_label"/>
       <activity
           android:name=".StreetViewPanoramaViewDemoActivity"
           android:label="@string/street_view_panorama_view_demo_label"/>
       <activity
           android:name=".StyledMapDemoActivity"
           android:label="@string/styled_map_demo_label"/>
       <activity
           android:name=".TagsDemoActivity"
           android:label="@string/tags_demo_label"/>
       <activity
           android:name=".TileCoordinateDemoActivity"
           android:label="@string/tile_coordinate_demo_label"/>
       <activity
           android:name=".TileOverlayDemoActivity"
           android:label="@string/tile_overlay_demo_label"/>
       <activity
           android:name=".UiSettingsDemoActivity"
           android:label="@string/ui_settings_demo_label"/>
       <activity
           android:name=".VisibleRegionDemoActivity"
           android:label="@string/visible_region_demo_label"/>
   </application>

</manifest> </syntaxhighlight> https://github.com/Sensedia

https://github.com/Sensedia/apix2017-microservice-products

Funcionamento

O funcionamento da Tecnologia é dado a partir da chave, chamada API KEY, dado pelo fornecedor da API, como está no primeiro código de exemplo acima. A partir disso, a API pode ter ou não interface, dependendo de qual é utilizada.

Para ela ser criada, existe o estilo REST de construção de web services, bem como as melhores práticas comumente adotadas na criação de uma RESTful API. Essa forma é útil para desenvolvedores que precisem criar uma API pública ou privada para expor dados e funcionalidades de um sistema web para outras aplicações, sejam elas web, mobile ou desktop.

O REST é mais simples que o SOAP. Foi projetado para ser usado em clientes “magros”, o que o torna ideal para utilização em dispositivos com capacidades limitadas. As respostas do REST são cacheáveis, diferente do SOAP. Isso dá um grande aumento de performance em clientes simples.

Enquanto o SOAP utiliza apenas XML, o REST pode se comunicar através de diversos formatos, sendo JSON o mais usado. Por ser um formato menos verboso e normalmente menor, a transferência de dados com o uso de JSON causa uma carga menor na rede, além de ser mais facilmente consumido por clientes construídos com qualquer linguagem, em especial HTML5.

O estilo REST é formado por um conjunto de regras no topo do protocolo HTTP que foram comunicadas pela primeira vez por Roy Fielding em sua tese de doutorado. Depois de seu surgimento, começou a se tornar uma alternativa mais leve de comunicação entre computadores (cliente e servidor).  Para ser considerado REST, o web service deve ser ou possuir: Interface uniforme, Stateless, Cacheável, Cliente-Servidor, Sistema em camadas e Código sob demanda.

Interface Uniforme

Para ser considerado REST, o web service deve ser ou possuir: Interface uniforme, Stateless, Cacheável, Cliente-Servidor, Sistema em camadas e Código sob demanda. Veremos em detalhes cada uma delas a seguir. O REST deverá ser baseado em recursos identificados por URLs. Diferente de SOAP, que é baseado em ações, como “obter produto”, o REST é baseado no recurso, deixando a definição das ações para os métodos HTTP. Portanto, quando quisermos obter um recurso, como um produto, faremos uma requisição GET para a URL que o localiza. é importante entendermos que as URLs serão definidas por substantivos e não por verbos, salvo quando for necessário fazer algum cálculo ou algo que não esteja vinculado a um recurso no servidor. O motivo disso é bem simples: tornar a interface simples. A Listagem 1 mostra exemplos de URLs para um recurso Produto que não seguem esse padrão e a Listagem 2 mostra exemplos que o seguem.

Listagem 1. Exemplos de URL que não seguem os princípios do REST.

  /listarProdutos = URL para listar todos os produtos
  /obterProduto/1 = URL para obter o produto 1
  /criarProduto = URL para criar produto
  /deletarProduto = URL para deletar produto

Listagem 2. Exemplos de URL que seguem os princípios do REST.

  /produtos = URL para ações sobre recursos do tipo Produto
  /produtos/1 = URL para ações sobre um produto específico

As ações são definidas utilizando os métodos do protocolo HTTP: GET, POST, PUT, DELETE e HEAD.

Software

As API's são utilizadas em ambientes que precisam de dados de outro local para serem transmitidas as informações tais como: Google Maps, Marketplaces, operadoras de cartão, redes sociais, etc.

Não existe uma única linguagem para ser feita a API, mas a mais utilizada é a Java, é possivel até procurar programas com interface que facilitem essa criação, o Javadoc. As outras linguagens que podem serem utilizadas são NodeJs, Ruby, PHP, etc.


Topologia ou Esquema funcional

  • real-life-architecture-png.png

Conexões

  • Links externos

Nos sites a seguir podem ser encontrados várias API's para serem utilizadas em integrações, veja:

http://99apis.com/home

https://market.mashape.com/explore?page=1

https://www.programmableweb.com/

  • Links internos

O link a seguir se relaciona com API, é uma integração também, mas apenas por rede, é possível ter mais informações acessando:

http://www.sourceinnovation.com.br/w/index.php?title=Projeto_WebService&veaction=edit&redlink=1


Informações adicionais

Atualmente a maioria dos projetos precisam de API para obterem informações facilitadas, é preciso estar a par desse assunto e de API's novas para estar a frente de concorrentes e disponibilizar melhores informações para clientes.

Referências bibiográficas

Google Maps para todas as plataformas. Disponível em: <https://developers.google.com/maps/> acesso em 17 de set de 2017

2º PELOI, R. 5 sites para descobrir APIs. Disponível em <https://sensedia.com/blog/apis/sites-para-descobrir-apis/> acesso em 19 de set de 2017