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>
- Proguard config for the demo project.
- This file only contains the proguard options required by the Google Maps
- 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
-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
- The Maps API uses custom Parcelables.
- Use this rule (which is slightly broader than the standard recommended one)
- to avoid obfuscating them.
-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"?> <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
Conexões
- Links externos
Nos sites a seguir podem ser encontrados várias API's para serem utilizadas em integrações, veja:
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
