Implémenter une API personnalisée pour un service REST Façade
Lorsque vous développez une application mobile, vous commencez généralement par la couche d'interface utilisateur puis vous connectez à l'application avec une autre application à l'aide des services Web REST. Cette approche fonctionne parfaitement pour les applications simples ou petites. Lorsque des applications sont plus importantes et que vous souhaitez vous connecter à plusieurs services back-end, vous pouvez introduire par inadvertance des problèmes de sécurité et de performances.
Il est recommandé de commencer à créer une couche d'API façade entre les services back-end externes et l'interface utilisateur pour réduire dans la mesure du 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 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, procédez comme suit :
Cliquez sur et sélectionnez Développement, puis des API dans le menu latéral. Si une API a déjà été créée (dans un état Brouillon ou Publié), vous verrez la liste des API. S'il n'existe aucune API personnalisée, une page avec 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
Créez des ressources pour définir les adresses de l'API. Une ressource est le chemin d'une API. Il possède un type, certaines données qui lui sont associées, une relation avec d'autres ressources et une ou plusieurs méthodes qui y agissent. Une ressource peut se trouver presque sur n'importe quelle image, un fichier texte, une collection d'autres ressources, une transaction logique, une procédure, etc.
Lorsque vous créez une méthode pour une ressource, le symbole correspondant apparaît sous le lien Méthodes. 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 à cette définition de méthode.
Vous pouvez effacer l'encombrement afin de localiser plus rapidement une ressource en passant en mode compact (elle se trouve à 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 pouvant être effectuées sur une ressource. La page Méthodes affiche une seule 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 voir ses 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 à laquelle vous voulez vous connecter le service. 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, qui contient la description des données à envoyer au service.
- Cliquez sur Demande 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 Obligatoire si le paramètre est obligatoire pour la méthode.
- Selon la méthode choisie, cliquez sur Ajouter un type de support 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'élément que vous créez, tel qu'une liste de clients ou une 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 support. - Cliquez sur Ajouter un type de support pour ajouter des types de support supplémentaires. 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, il se peut que vous ayez besoin d'une réponse. Une réponse décrit le processus de renvoi de résultats à partir du service. Vous pouvez définir une réponse pour vérifier que les données demandées ont été renvoyées ou vous souhaitez recevoir une réponse indiquant si la demande a été reçue. La définition d'une réponse est semblable à la définition d'une demande. La principale différence réside dans le fait que vous devrez sélectionner un code de statut pour indiquer le résultat de la connexion.
POST
de la ressource audits
a été créée avec un code de statut 201 indiquant qu'une ressource a été créée. Cet exemple montre également le format de réponse renvoyée application/json
, un en-tête Location
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 choisir de tester vos adresses ou cliquer sur Adresses dans la barre de navigation pour revenir à la page principale Ressources. A partir de là, vous pouvez passer à une autre page du concepteur d'API pour créer une racine, des types de ressource ou des caractéristiques, ou ajouter de la 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 REST Connector
Utilisez l'assistant API de connecteur REST pour créer, configurer et tester votre API de connecteur.
Pour obtenir une API de connecteur de travail de base, vous pouvez fournir exactement un nom pour l'API de connecteur et une URL pour le service externe.
A partir de cet emplacement, vous pouvez effectuer les opérations suivantes :
-
Définissez des règles permettant de former des demandes ou des réponses spécifiques pour les données auxquelles vous voulez accéder.
-
Configurez des stratégies de sécurité côté client pour le service auquel vous accédez.
-
Tester la connexion et tester les résultats des appels effectués vers la connexion.
Vous devez créer une API et une implémentation personnalisées pour permettre à vos applications d'appeler les API du connecteur et de générer automatiquement l'API et l'implémentation. 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 opérationnel en complétant les deux premières pages de l'assistant API REST Connector.
-
Cliquez sur
et sélectionnez Développement, puis des 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, et dans la liste déroulante, sélectionnez REST.
-
Identifiez la nouvelle API de connecteur REST en fournissant les informations suivantes :
-
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é à la fin de l'URI de base relatif en tant que nom de ressource pour l'API de connecteur. L'URI de base est visible sous le champ Nom de l'API.
A l'exception d'une nouvelle version de cette API de connecteur, aucune autre API de connecteur ne peut avoir le même nom de ressource.
-
Brève description : cette description sera affichée sur la page Connecteurs lorsque cette API sera sélectionnée.
-
-
Cliquez sur Créer.
-
Dans la page Général de la boîte de dialogue API de connecteur REST, définissez les valeurs de temporisation :
-
Temporisation de lecture HTTP : durée maximale (en millisecondes) qui peut être passée à attendre la lecture des données. Si vous n'indiquez aucune valeur, la valeur par défaut, 20 secondes, est appliquée.
-
Temporisation de connexion HTTP : durée (en millisecondes) de la connexion à l'URL distante. La valeur 0mms indique qu'une temporisation infinie est autorisée.
Les valeurs de temporisation HTTP doivent être inférieures à la stratégie
Network_HttpRequestTimeout
, qui a une valeur par défaut de 40,000 ms.Remarque :
Si vous disposez du rôle d'administrateur de cloud mobile en plus du rôle de développeur de service, vous pouvez ouvrir le fichierpolicies.properties
afin de voir la valeur des stratégies réseau pour l'environnement en cours à partir de la vue Administrateur. Sinon, demandez les valeurs à l'administrateur de cloud mobile.
-
-
Cliquez sur Descripteur, puis saisissez les informations de connexion pour le service.
Si vous fournissez une URL de descripteur Swagger, les ressources disponibles sont identifiées et affichées, et vous pouvez sélectionner celles de votre choix.
Remarque :
Seuls les ports d'accès Internet standard 80 et 443 sont pris en charge. Impossible d'établir la connexion à un service à l'aide d'un port personnalisé. -
Cliquez sur Enregistrer.
-
(Facultatif) Cliquez sur Tester, sélectionnez les informations d'identification et de connexion d'authentification, puis effectuez les appels de test au service.
A partir de là, vous pouvez configurer le connecteur de manière plus approfondie en procédant comme suit :
-
(Si vous avez fourni un descripteur dans la page Descripteur), accédez à la page Ressources et sélectionnez les méthodes des ressources exposées.
-
Définissez des règles.
-
Définir des stratégies de sécurité.
Pour être sûr que la configuration d'API de connecteur est valide, vous devez la tester de manière approfondie (pas seulement à partir de la page de test d'API de connecteur) avant de la publier. En d'autres termes, vous devez également tester l'API personnalisée (avec son implémentation) utilisant cette API de connecteur. Généralement, 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 les 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 à des ressources sur le service, les appels à un chemin proxy spécifique et les appels pour certains types d'opération (verbes). Cela permet d'appliquer une syntaxe cohérente à la chaîne d'URL, d'enregistrer le développeur du code personnalisé afin qu'il n'ait pas à insérer ces valeurs et de permettre le suivi des différents appels via les analyses.
Vous pouvez créer une ou plusieurs règles. Chaque règle peut avoir un ou plusieurs paramètres de type Query
et Header
.
Si aucune règle n'est appliquée, tous les appels sont transmis au service existant via le proxy.
La description de la règle que vous venez de définir apparaît dans la bannière Règle, juste au-dessus de la section Paramètres par défaut. Par exemple, supposons que les valeurs suivantes ont é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
Voici la description de la règle :
Pour GET
à https://maps.googleapis.com/maps/api/directions/json?origin=los+angeles&destination=seattle
disponible dans myMapAPI/directions
, Inclure Query:key=A3FAEAJ903022
.
Si aucune règle n'a été créée, la description se présenterait comme suit :
Pour ALL METHODS pour https://maps.googleapis.com/maps/api/directions
disponible sur myMapAPI
, aucun paramètre par défaut ne sera appliqué.
Vous disposez désormais d'un URI de base correspondant au service existant. 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 les stratégies de sécurité et les propriétés de remplacement
Chaque stratégie de sécurité contient des propriétés, appelées remplacements, que vous pouvez configurer. L'une des raisons pour lesquelles remplacer une propriété de configuration de stratégie est de limiter le nombre de stratégies que vous devez tenir à jour : plutôt que de créer plusieurs stratégies avec des configurations légèrement variées, 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 les remplacements de stratégie, procédez comme suit :