Implémenter une API personnalisée pour un service REST de façade
Lorsque vous développez une application mobile, vous commencez généralement par la couche d'interface utilisateur, puis vous connectez votre application à une autre application à l'aide de services Web REST. Cette approche fonctionne bien pour les applications petites ou simples. Lorsque les applications sont plus volumineuses et que vous souhaitez vous connecter à plusieurs services back-end, vous pouvez par inadvertance introduire des problèmes de performances et de sécurité.
Il est recommandé de commencer à créer une couche API de façade entre les services back-end externes et l'interface utilisateur afin de réduire autant que possible le nombre d'appels aux services back-end. Par exemple, votre application mobile peut exécuter un seul appel vers la couche d'API de façade qui gère les appels vers d'autres services REST et consolide toutes les données entrantes en une seule réponse à votre application mobile.
Créer une API personnalisée complète
Pour créer une API personnalisée complète à l'aide d'Oracle Mobile Hub.
Cliquez sur et sélectionnez Développement, puis API dans le menu latéral. Si une API a déjà été créée (à l'état Brouillon ou Publié), vous verrez la liste des API. S'il n'existe aucune API personnalisée, une page contenant le bouton Nouvelle API apparaît. Cliquez sur l'API que vous avez déjà créée ou sur Nouvelle API pour commencer.
Définir des adresses
Vous créez des ressources pour définir les adresses de votre API. Une ressource est le nœud d'une API. Il a un type, des données qui lui sont associées, une relation avec d'autres ressources et contient une ou plusieurs méthodes qui agissent sur lui. Une ressource peut être presque n'importe quoi : une image, un fichier texte, un ensemble d'autres ressources, une transaction logique, une procédure, etc.
Lorsque vous créez une méthode pour une ressource, un symbole correspondant à cette méthode apparaît sous le lien Methods. Vous pouvez immédiatement voir quelles méthodes sont définies pour une ressource si vous devez examiner une définition de ressource. Cliquez sur une icône pour accéder directement à la définition de la méthode.
Vous pouvez effacer l'encombrement pour localiser une ressource plus rapidement en passant au mode compact (à droite de Nouvelle ressource). L'affichage compact masque la description, le type et le chemin de la ressource.
Ajout de méthodes à vos ressources
Les méthodes sont des actions qui peuvent être effectuées sur une ressource. La page Methods (Méthodes) indique une méthode à la fois. Après avoir défini au moins deux méthodes, vous pouvez cliquer sur l'icône d'une méthode en haut de la page pour en voir les détails.
Après avoir défini des méthodes pour la ressource, vous pouvez définir les demandes et les réponses pour ces méthodes.
Définir une demande pour la méthode
Maintenant que vous avez sélectionné une méthode, définissez la demande du service auquel vous souhaitez vous connecter. Par exemple, si vous avez sélectionné une méthode POST
, vous pouvez désormais définir les éléments à créer. Pour ce faire, ajoutez des paramètres et un corps de demande contenant la description des données à envoyer au service.
- Cliquez sur Demander pour définir une demande.
- Cliquez sur Ajouter un paramètre et sélectionnez un type de paramètre : Requête ou En-tête. Sélectionnez Requis si le paramètre est obligatoire pour la méthode.
- Selon la méthode sélectionnée, cliquez sur Add Media Type et définissez le corps de la méthode. Le corps contient les données que vous envoyez au serveur. Par exemple, si vous définissez une méthode
POST
, vous devrez définir l'article que vous créez, tel qu'une nouvelle liste de clients ou une nouvelle demande de service. Si vous définissez une méthodeGET
, vous n'avez pas besoin d'envoyer un corps de méthode, vous n'avez donc pas besoin de spécifier de type de média. - Cliquez sur Add Media Type pour ajouter d'autres types de média. Si vous décidez de ne pas utiliser la méthode, cliquez sur X dans la bannière pour la supprimer.
Définir une réponse pour la méthode
Selon la demande, vous pouvez ou non avoir besoin d'une réponse. Une réponse décrit le processus de renvoi des résultats du service. Vous pouvez définir une réponse qui vérifie que les données que vous avez demandées ont été renvoyées ou une réponse qui confirme que la demande a été reçue ou non. La définition d'une réponse est similaire à la définition d'une demande. La principale différence est que vous devrez sélectionner un code d'état pour vous informer du résultat de la connexion.
POST
de la ressource audits
a été créée avec un code de statut de 201 indiquant qu'une nouvelle ressource a été créée. L'exemple montre également le format de réponse de retour application/json
, un en-tête Location
qui a été ajouté et le corps du message contenant les données de simulation :responses:
201:
description: |
The request has been fulfilled and resulted in a new resource
being created. The newly created resource can be referenced
by the URI(s)returned in the entity of the response, with the
most specific URI for the resource given by a Location header
field.
headers:
Location:
displayName: Location
description: |
Identifies the location of the newly created resource.
type: string
example: |
/20934
required: true
body:
application/json:
example: |
{
"id": 20934,
"title": "Lynn's Leaking Water Heater",
"contact": {
"name": "Lynn Adams",
"street": "45 O'Connor Street",
"city": "Ottawa",
"postalcode": "a1a1a1",
"username": "johnbeta"
},
"status": "New",
"driveTime": 30,
"priority": "high",
"notes": "My notes",
"createdon": "2014-01-20 23:15:03 EDT",
"imageLink": "storage/collections/2e029813-d1a9-4957-a69a-fbd0d74331d77/objects/6cdaa3a8-097e-49f7--9bd2-88966c45668f?user=lynn1014"
}
Lorsque vous définissez votre réponse, vous pouvez décider de tester vos adresses ou cliquer sur Adresses dans la barre de navigation pour revenir à la page principale Ressources. Vous pouvez ensuite accéder à une autre page du concepteur d'API pour créer une racine, des types de ressource ou des caractéristiques, ou ajouter une documentation d'API.
Si vous décidez de ne pas utiliser la méthode, cliquez sur X dans la bannière pour la supprimer.
Créer une API de connecteur REST
Utilisez l'assistant API de connecteur REST pour créer, configurer et tester l'API de connecteur.
Pour obtenir une API de connecteur fonctionnelle de base, vous pouvez fournir aussi peu qu'un nom pour l'API de connecteur et une URL pour le service externe.
A partir de là, vous pouvez :
-
Définissez des règles pour former des demandes ou des réponses spécifiques pour les données auxquelles vous souhaitez accéder.
-
Configurez les stratégies de sécurité côté client pour le service auquel vous accédez.
-
Testez la connexion et testez les résultats des appels effectués.
Vous devez créer une API et une implémentation personnalisées pour permettre à vos applications d'appeler les API de connecteur, et générer l'API et l'implémentation automatiquement. Pour ce faire manuellement, vous devez créer une API personnalisée avec les ressources appropriées, puis implémenter le code personnalisé.
Configuration d'un connecteur de base
Vous pouvez créer un connecteur fonctionnel en remplissant les deux premières pages de l'assistant API de connecteur REST.
-
Cliquez sur
et sélectionnez Développement, puis API dans le menu latéral.
-
Cliquez sur REST (s'il s'agit de la première API de connecteur à créer) ou sur Nouveau connecteur, puis sélectionnez REST dans la liste déroulante.
-
Identifiez la nouvelle API de connecteur REST en fournissant les éléments suivants :
-
Nom d'affichage de l'API : nom tel qu'il apparaîtra dans la liste des API de connecteur.
-
Nom d'API : nom unique de l'API de connecteur.
Par défaut, ce nom est ajouté à l'URI de base relatif en tant que nom de ressource pour l'API de connecteur. Vous pouvez voir l'URI de base sous le champ Nom d'API.
En dehors d'une nouvelle version de cette API de connecteur, aucune autre API de connecteur ne peut avoir le même nom de ressource.
-
Description courte : cette description sera affichée sur la page Connecteurs lorsque cette API sera sélectionnée.
-
-
Cliquez sur Créer.
-
Sur la page Général de la boîte de dialogue API de connecteur REST, définissez les valeurs de délai d'expiration :
-
Délai d'expiration de lecture HTTP : délai maximal (en millisecondes) d'attente de lecture des données. Si vous n'indiquez aucune valeur, la valeur par défaut de 20 secondes est appliquée.
-
Délai d'expiration de connexion HTTP : temps (en millisecondes) passé à se connecter à l'URL distante. Une valeur de 0 ms signifie qu'un délai d'expiration infini est autorisé.
Les valeurs de délai d'expiration HTTP doivent être inférieures à la stratégie
Network_HttpRequestTimeout
, qui a une valeur par défaut de 40 000 ms.Remarques :
Si vous disposez d'un rôle d'administrateur de cloud mobile en plus de votre rôle de développeur de service, vous pouvez ouvrir le fichierpolicies.properties
pour afficher la valeur des stratégies réseau pour l'environnement en cours à partir de la vue Administrateur. Sinon, demandez les valeurs à l'administrateur du cloud mobile.
-
-
Cliquez sur Descripteur et entrez les informations de connexion du service.
Si vous fournissez une URL de descripteur Swagger, les ressources disponibles sont identifiées et affichées, et vous pouvez sélectionner celles que vous souhaitez.
Remarques :
Seuls les ports d'accès Internet standard 80 et 443 sont pris en charge. La connexion à un service ne peut pas être établie à l'aide d'un port personnalisé. -
Cliquez sur Enregistrer.
-
(Facultatif) Cliquez sur Tester, sélectionnez les informations d'identification d'authentification et effectuez des appels de test vers le service.
Vous pouvez ensuite configurer le connecteur de l'une des manières suivantes :
-
(Si vous avez fourni un descripteur sur la page Descripteur), accédez à la page Ressources et sélectionnez les méthodes des ressources exposées.
-
Définir des règles.
-
Définir les stratégies de sécurité.
Pour vous assurer que la configuration de l'API de connecteur est valide, vous devez la tester minutieusement (pas seulement à partir de la page Test de l'API de connecteur) avant de la publier. Autrement dit, vous devez également tester l'API personnalisée (avec son implémentation) qui utilise cette API de connecteur. Essentiellement, si vous êtes prêt à publier l'API de connecteur, vous devez également être prêt à publier l'API personnalisée qui l'appelle.
Définir des règles
Vous définissez des règles pour définir les interactions entre votre application mobile et un service. Les règles permettent d'ajouter des valeurs de paramètre par défaut pour tous les appels aux ressources du service, les appels à un chemin proxy spécifique et les appels à certains types d'opération (verbes). Cela permet d'appliquer une syntaxe cohérente de la chaîne d'URL, évite au développeur de code personnalisé d'avoir à insérer ces valeurs et permet de suivre les différents appels via des analyses.
Vous pouvez créer des règles. Chaque règle peut comporter des paramètres de type Query
et Header
.
Si aucune règle n'est appliquée, tous les appels sont transmis via le proxy au service existant.
La description de la règle que vous venez de définir est affichée dans la bannière Règle juste au-dessus de la section Paramètres par défaut. Par exemple, supposons que les valeurs suivantes aient été fournies :
-
URL distante =
https://maps.googleapis.com/maps/api/directions
/json?origin=los+angeles&destination=seattle
-
URI local =
myMapAPI
-
Règle avec le paramètre suivant :
Query:key:A3FAEAJ903022
-
Méthodes HTTP
GET
etPUT
La description de la règle se lirait comme suit :
Pour les versions GET
à https://maps.googleapis.com/maps/api/directions/json?origin=los+angeles&destination=seattle
disponibles à l'adresse myMapAPI/directions
, incluez Query:key=A3FAEAJ903022
.
Si aucune règle n'est créée, la description se lit comme suit :
Pour ALL METHODS à https://maps.googleapis.com/maps/api/directions
disponible sur myMapAPI
, aucun paramètre par défaut ne sera appliqué.
Vous disposez maintenant d'un URI de base qui correspond au service existant. En utilisant notre exemple :
mobile/connector/myMapAPI/directions/json?origin=los+angeles&destination=seattle
correspond à https://maps.googleapis.com/maps/api/directions/json?origin=los+angeles&destination=seattle
Configurer des stratégies de sécurité et remplacer les propriétés
Chaque stratégie de sécurité possède des propriétés, appelées remplacements, que vous pouvez configurer. L'une des raisons de remplacer une propriété de configuration de stratégie est de limiter le nombre de stratégies à gérer : au lieu de créer plusieurs stratégies avec des configurations légèrement différentes, vous pouvez utiliser la même stratégie générique et remplacer des valeurs spécifiques pour répondre à vos besoins.
Pour sélectionner une stratégie de sécurité et définir ses remplacements, procédez comme suit :