Sem resumo de edição
Etiqueta: visualeditor
Etiqueta: visualeditor
 
(14 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
= Especificação técnica =
= Especificação técnica =
Descrição minuciosa das características da tecnologia, pormenorização com detalhes técnicos e precisos que esclareçam a destinação, ou uso ou operação. Incluir definições, concepções ou caracterizações


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.
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.
Linha 8: Linha 6:


== Código fonte de exemplo==
== Código fonte de exemplo==
Exemplo de código chave da API do Google Maps:
<syntaxhighlight>


    <meta-data
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        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"/>
        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>
# Proguard config for the demo project.
#


<syntaxhighlight lang="python3">
# This file only contains the proguard options required by the Google Maps
Arquivo = "lista_contatos.txt" # Nome do arquivo
# Android API v2. It should be used in addition to the one provided by the
# Android SDK (<sdk>/tools/proguard/proguard-android-optimize.txt).
#
# For more details on the use of proguard in Android, please read:
# http://proguard.sourceforge.net/manual/examples.html#androidapplication


def ler_arquivo():              # Função que le o arquivo de texto
-optimizations !code/simplification/variable
    try:                        # Tratamento de erro
        arq = open(Arquivo,"r+") # Abre o arquivo para leitura
        print( '\n'+arq.read() ) # Quebra linha e mostra o conteudo
        arq.close()              # Fecha o arquivo
    except IOError:              # Tratamento de erro
        print('\nArquivo não encontrado!')


def escrever_linhas(texto):        # Função que le e escreve no arquivo
-keep public class * extends android.app.Activity
     try:                          # Tratamento de erro
-keep public class * extends android.app.Fragment
        arq = open(Arquivo,"a+")   # Abre o arquivo para gravação no final do arquivo
-keep public class * extends android.support.v4.app.Fragment
        arq.writelines('\n'+texto) # Escreve no arquivo o parametro 'texto'
 
        arq.close()               # Fecha o arquivo
# The Maps API uses custom Parcelables.
        print('\nLinha gravada com sucesso')
# Use this rule (which is slightly broader than the standard recommended one)
    except IOError:               # Tratamento de erro
# to avoid obfuscating them.
        print('\nErro ao abrir o arquivo!') # Mostra na tela uma mensagem de erro
-keepclassmembers class * implements android.os.Parcelable {
     static *** CREATOR;
}
 
# 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"?>
<!--
    Copyright (C) 2013 The Android Open Source Project
    Licensed 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.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mapdemo" >


def pesquisar_contato(nome):
     <!--
     try:
        The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
        arq = open(Arquivo, "r+")
        Google Maps Android API v2, but you must specify either coarse or fine
        dicionario = {'nome':'', 'telefone':'', 'email':''}
        location permissions for the 'MyLocation' functionality.
        achei = False
    -->
        # lógica ler arquivo e comparar nome
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        for cont, s in enumerate(arq.readlines()):
           
            dicionario['nome'], dicionario['telefone'],dicionario['email'] = s.split(' - ')
            if dicionario['nome'] == nome:
                print(cont)
                print('Nome: %s'% dicionario['nome'])
                print('Telefone: %s'% dicionario['telefone'])
                print('Email: %s'% dicionario['email'])
                achei = True
               
        if not achei:
            print('Não existe %s' % (nome))


          
    <!-- EXTERNAL_STORAGE permissions are optional for Android 6.0 onwards. -->
         # se achou imprime, se não mostra uma mensagem de nao encontrado
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="22" />
    <uses-permission
         android:name="android.permission.READ_EXTERNAL_STORAGE"
         android:maxSdkVersion="22" />


         arq.close
    <application
          
        android:allowBackup="true"
    except IOError:
         android:icon="@mipmap/ic_launcher"
         print('\nContato não encontrado')
         android:label="@string/demo_title"
        android:supportsRtl="true"
         android:theme="@style/AppTheme" >


        <!--
            The API key for Google Maps-based APIs is defined as a string resource.
            (See the file "res/values/google_maps_api.xml").
            Note that the API key is linked to the encryption key used to sign the APK.
            You need a different API key for each encryption key, including the release key that is used to
            sign the APK for publishing.
            You can define the keys for the debug and release targets in src/debug/ and src/release/.
        -->
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />


def excluir_contatos():
        <activity android:name=".MainActivity">
    try:
            <intent-filter>
         arq =open('lista_contatos.txt','r+')
                <action android:name="android.intent.action.MAIN"/>
         valores = arq.readlines()
                <category android:name="android.intent.category.LAUNCHER"/>
         l = []
            </intent-filter>
         splited =[]
        </activity>
         nome = input('Entre com um nome:')
        <activity
         for x in valores:
            android:name=".BasicMapDemoActivity"
             splited=x.split(' - ')
            android:label="@string/basic_map_demo_label"/>
             if splited[0]==nome:
        <activity
              pass
            android:name=".CameraDemoActivity"
             else:
            android:label="@string/camera_demo_label"/>
                l.append(splited)
        <activity
          
            android:name=".CameraClampingDemoActivity"
         arq.close()
            android:label="@string/camera_clamping_demo_label"/>
         novo_cadastro(l)
        <activity
    except:
            android:name=".CircleDemoActivity"
         print('erro')
            android:label="@string/circle_demo_label"/>
def novo_cadastro(l):
        <activity
    arq = open(Arquivo,'w')
            android:name=".EventsDemoActivity"
    for x in l:
            android:label="@string/events_demo_label"/>
        #print("Nome:%s | Telefone:%s | Email:%s"%(x[0],x[1],x[2]))
        <activity
        arq.write("%s - %s - %s" %(x[0],x[1],x[2]))
            android:name=".GroundOverlayDemoActivity"
    arq.close()
            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"/>


while(True):
     </application>
      
    print('\n        Opcões:')
    print(' ')
    print('1 - Cadastrar contato')
    print('2 - Listar dados')
    print('3 - Pesquisar contato')
    print('4 - Excluir contato')
    print('9 - Sair')
    print(' ')
    Op = int(input('Digite a opção desejada:')) # Entrada da opcao pelo teclado


    if Op == 1:                                    # Se a opcao for 1
</manifest>
        nome = input('\nDigite o nome do contato:')      # Entrada do nome pelo teclado
        fone = input('Digite o número do telefone:')# Entrada do telefone pelo teclado
        email = input('Digite o email:')            # Entrada do telefone pelo teclado
        contato = (nome+' - '+fone+' - '+email)    # Recebe o nome + o telefone
        escrever_linhas(str(contato))              # Chama a função que grava em arquivo
    elif Op == 2:                                  # Se a opcao for 2
        ler_arquivo()                              # Chama a função que le o arquivo
    elif Op == 9:                                  # Se a opcao for 0
        break                                      # Quebra o laço infinito
    elif Op == 3:
        nome = input("Digite o nome: ")
        pesquisar_contato(nome)
    elif Op == 4:
        #nome = input ("Digite o nome: ")
        excluir_contatos()
</syntaxhighlight>
</syntaxhighlight>
https://github.com/Sensedia
https://github.com/Sensedia/apix2017-microservice-products


= Funcionamento =
= Funcionamento =
Descrever a forma como a tecnologia funciona descendo nos detalhes de interfaceamento, conexões físicas, sinalização, tráfego de dados ou controle
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.


<br>
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 =
Explicar basicamente onde o software é utilizado nesta tecnologia informando possíveis linguagens e outras ferramentas como framqworks, banco de dados, etc. Se possível informar link de download ou referência.
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.
 
<br>
<br>


= Topologia ou Esquema funcional =
= Topologia ou Esquema funcional =
Desenhar ou plotar  representações visuais estruturadas por meio de diagramas, esquemas, protocolos que exemplfoquem esse tema, logicamente colocando um rodapé explicativo
* https://cms-assets.tutsplus.com/uploads/users/487/posts/22543/image/real-life-architecture-png.png
<br>


= Conexões =
= Conexões =
Incluir links (internos ou externos) temas que tem relação com este, explicando detalhes sobre. Limite de 3 internos e 2 externos.
* 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
 
<br>
<br>


= Informações adicionais =
= Informações adicionais =
Descrever detalhes a mais sobre esse tema.
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.<br>
<br>


= Referências bibiográficas =
= Referências bibiográficas =
Relacionar aqui as referências bibliográficas no padrão ABNT.  
Google Maps para todas as plataformas. Disponível em: <<nowiki>https://developers.google.com/maps/</nowiki>> acesso em 17 de set de 2017
Bases de procura: Artigos, publicações acadêmicas, revistas e sites de fornecedores
 
2º PELOI, R. 5 sites para descobrir APIs. Disponível em <<nowiki>https://sensedia.com/blog/apis/sites-para-descobrir-apis/</nowiki>> acesso em 19 de set de 2017
 
<br>
<br>

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