Utiliser SODA pour REST avec Autonomous AI Database

Autonomous AI Database prend en charge l'accès simple aux documents Oracle (SODA) pour REST.

Aperçu de l'utilisation de SODA pour REST

SODA pour REST est un service REST pré-déployé qui peut être utilisé pour stocker des documents JSON dans votre base de données.

SODA permet le développement flexible d'applications de type NoSQL sans avoir à utiliser SQL. Avec SODA, les documents JSON sont stockés dans des collections nommées et gérés à l'aide de simples opérations CRUD (création, lecture, mise à jour et suppression). Bien que le code SQL ne soit pas requis, le JSON stocké dans les collections SODA reste entièrement accessible à partir du code SQL au besoin. Par exemple, une application opérationnelle peut être entièrement créée à l'aide de SODA (sans SQL), mais les données peuvent ensuite être analysées à l'aide de SQL provenant de l'extérieur de l'application. Autonomous AI Database SODA offre aux développeurs d'applications le meilleur du monde NoSQL et SQL - un développement d'applications rapide, flexible et évolutif sans perdre la capacité d'exploiter SQL pour les analyses et la production de rapports.

SODA pour REST est déployé dans ORDS sous le modèle d'URL suivant, où le schéma correspond à un schéma de base de données activé pour REST.

/ords/schema/soda/latest/*

Les exemples suivants utilisent l'outil de ligne de commande cURL (http://curl.haxx.se/) pour soumettre des demandes REST à la base de données. Cependant, d'autres clients et bibliothèques REST de 3e partie devraient également fonctionner. Les exemples utilisent le schéma de base de données ADMIN, qui est activé pour REST. Vous pouvez utiliser SODA pour REST avec des commandes cURL à partir de l'interpréteur de commandes Oracle Cloud.

Cette commande crée une nouvelle collection nommée "fruit" dans le schéma ADMIN :

> curl -X PUT -u 'ADMIN:<password>' \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit"

Ces commandes insèrent trois documents JSON dans la collection de fruits :

> curl -X POST -u 'ADMIN:<password>' \
 -H "Content-Type: application/json" --data '{"name":"orange", "count":42}' \
 "https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit"

{"items":[{"id":"6F7E5C60197E4C8A83AC7D7654F2E375"...
 
> curl -X POST -u 'ADMIN:<password>' \
 -H "Content-Type: application/json" --data '{"name":"pear", "count":5}' \
 "https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit"

{"items":[{"id":"83714B1E2BBA41F7BA4FA93B109E1E85"...
 
> curl -X POST -u 'ADMIN:<password>' \
 -H "Content-Type: application/json" \
 --data '{"name":"apple", "count":12, "color":"red"}' \
 "https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit"

{"items":[{"id":"BAD7EFA9A2AB49359B8F5251F0B28549"...

Cet exemple extrait un document JSON stocké de la collection :

> curl -X POST -u 'ADMIN:<password>' \
 -H "Content-Type: application/json" --data '{"name":"orange"}' \
 "https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit?action=query"

{
  "items": [
    {
      "id":"6F7E5C60197E4C8A83AC7D7654F2E375",
      "etag":"57215643953D7C858A7CB28E14BB48549178BE307D1247860AFAB2A958400E16",
      "lastModified":"2019-07-12T19:00:28.199666Z",
      "created":"2019-07-12T19:00:28.199666Z",
      "value":{"name":"orange", "count":42}
    }
  ],
  "hasMore":false,
  "count":1
}

Cette interrogation SQL accède à la collection de fruits :

SELECT 
     f.json_document.name,
     f.json_document.count,
     f.json_document.color
FROM fruit f;

L'interrogation renvoie les trois lignes suivantes :

name      count     color
--------- --------- -------
orange    42        null
pear      5         null
apple     12        red
Note

Si vous utilisez une base de données d'IA autonome de type Toujours gratuit avec Oracle AI Database 26ai, Oracle recommande ce qui suit :

Pour les projets qui ont été démarrés à l'aide d'une version de base de données antérieure à Oracle Database 21c, spécifiez explicitement les métadonnées pour la collection par défaut, comme indiqué dans l'exemple de la section Pilotes SODA. Pour les projets démarrés à l'aide de la version Oracle Database 21c ou ultérieure, il suffit d'utiliser les métadonnées par défaut. Pour plus d'informations, voir Pilotes SODA.

Ces exemples présentent un sous-ensemble des fonctions SODA et SQL/JSON. Voir ce qui suit pour plus d'informations :

Charger des données-échantillons de commande d'achat à l'aide de SODA pour REST

Oracle fournit un jeu substantiel de documents de commande d'achat JSON, dans le fichier de texte brut POList.json, en tant que tableau d'objets JSON, où chaque objet de ce type représente un document.

Les exemples suivants utilisent l'outil de ligne de commande cURL (http://curl.haxx.se/) pour soumettre des demandes REST à la base de données. Cependant, d'autres clients et bibliothèques REST de 3e partie devraient également fonctionner. Les exemples utilisent le schéma de base de données ADMIN, qui est activé pour REST. Vous pouvez utiliser SODA pour REST avec des commandes cURL à partir de l'interpréteur de commandes Oracle Cloud.

Vous pouvez charger cet exemple de jeu de données de commande d'achat dans une collection purchaseorder de votre base de données Autonomous AI Database avec SODA pour REST, à l'aide des commandes curl suivantes :

curl -X GET "https://raw.githubusercontent.com/oracle/db-sample-schemas/master/order_entry/POList.json" -o POList.json

curl -X PUT -u 'ADMIN:password' \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/purchaseorder"

curl -X POST -H -u 'ADMIN:password' 'Content-type: application/json' -d @POList.json \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/purchaseorder?action=insert"

Vous pouvez ensuite utiliser ces données de commande d'achat pour essayer des exemples dans le guide du développeur JSON d'Oracle AI Database.

Par exemple, l'interrogation suivante sélectionne à la fois le id d'un document JSON et les valeurs de la collection d'ordres d'achat JSON stockée dans la colonne json_document de la table purchaseorder. Les valeurs sélectionnées proviennent des champs PONumber, Reference et Requestor de la colonne JSON json_document, qui sont projetés à partir du document sous forme de colonnes virtuelles (voir Clause SQL NESTED au lieu de JSON_TABLE pour plus d'informations).

SELECT id, t.*
  FROM purchaseorder
    NESTED json_document COLUMNS(PONumber, Reference, Requestor) t;

Voir ce qui suit pour plus d'informations :

Utiliser SODA pour REST avec des données d'identification de client OAuth

Vous pouvez accéder à SODA pour REST sur Autonomous AI Database à l'aide de l'authentification OAuth. Selon votre application, l'accès à SODA pour REST avec l'authentification OAuth peut améliorer la performance et la sécurité.

Effectuez les étapes suivantes pour utiliser l'authentification OAuth afin de fournir un accès limité à SODA pour REST sur la base de données d'intelligence artificielle autonome :

  1. En tant qu'utilisateur ADMIN, accédez à Database Actions et créez un utilisateur doté des privilèges requis.
    1. Accédez à Database Actions en tant qu'ADMIN.
    2. Dans Database Actions, cliquez sur icône de navigation pour afficher les actions disponibles.
    3. Dans Database Actions, sous Administration, sélectionnez Utilisateurs de base de données.
    4. Cliquez sur Créer un utilisateur.
    5. Dans la zone Créer un utilisateur, dans l'onglet Utilisateur, entrez Nom d'utilisateur et un Mot de passe et confirmez le mot de passe.
    6. Sélectionnez Accès Web.
    7. Dans la zone Créer un utilisateur, sélectionnez l'onglet Rôles octroyés et accordez DWROLE à l'utilisateur.
    8. Cliquez sur Créer un utilisateur.
  2. Utilisez une feuille de calcul SQL dans Database Actions pour accorder aux utilisateurs les privilèges requis pour charger des données.
    1. Accédez à Database Actions en tant qu'ADMIN.
    2. Dans Database Actions, cliquez sur icône de navigation pour afficher les actions disponibles.
    3. Dans Database Actions, sous Development (Développement), cliquez sur SQL pour ouvrir une feuille de calcul SQL.
    4. Accordez à l'utilisateur les privilèges requis pour charger les données à partir de l'étape 1.
      GRANT UNLIMITED TABLESPACE TO user_name;
  3. Déconnectez-vous en tant qu'utilisateur ADMIN.
  4. Connectez-vous à Database Actions en tant qu'utilisateur configuré pour utiliser l'authentification OAuth.
  5. Dans Database Actions, utilisez une feuille de calcul SQL pour enregistrer le client OAuth.
    1. Enregistrez le client OAuth.
      Par exemple, entrez les commandes suivantes dans la feuille de calcul SQL, où vous fournissez les valeurs appropriées pour votre utilisateur et votre application client.
      BEGIN
        OAUTH.create_client(
          p_name            => 'my_client',
          p_grant_type      => 'client_credentials',
          p_owner           => 'Example Company',
          p_description     => 'A client for my SODA REST resources',
          p_support_email   => 'user_name@example.com',
          p_privilege_names => 'my_priv'
        );
       
        OAUTH.grant_client_role(
          p_client_name => 'my_client',
          p_role_name   => 'SQL Developer'
        );
       
        OAUTH.grant_client_role(
          p_client_name => 'my_client',
          p_role_name   => 'SODA Developer'
        );
        COMMIT;
      END;
      /
    2. Dans la feuille de calcul SQL, cliquez sur Exécuter le script pour exécuter la commande.

    Cela enregistre un client nommé my_client pour accéder au privilège my_priv à l'aide des données d'identification de client OAuth.

  6. Obtenez les valeurs client_id et client_secret requises pour générer le jeton d'accès.
    Par exemple, dans la feuille de calcul SQL, exécutez la commande suivante :
    SELECT id, name, client_id, client_secret FROM user_ords_clients;
  7. Obtenez le jeton d'accès. Pour obtenir un jeton d'accès, vous envoyez une demande REST GET à database_ORDS_urluser_name/oauth/token.

    database_ORDS_url est disponible à partir de Database Actions, sous Services connexes, sur la carte RESTful Services and Soda. Pour plus d'informations, voir Accéder aux services RESTful et SODA pour REST.

    Dans la commande suivante, utilisez client_id et client_secret obtenus à l'étape 6.

    L'exemple suivant utilise l'outil de ligne de commande cURL (http://curl.haxx.se/) pour soumettre des demandes REST à Autonomous AI Database. Cependant, d'autres clients et bibliothèques REST de 3e partie devraient également fonctionner.

    Vous pouvez utiliser l'outil de ligne de commande cURL pour soumettre la demande REST GET. Exemple :

    > curl -i -k --user SBA-iO9Xe12cdZHYfryBGQ..:vvUQ1AagTqAqdA2oN7afSg.. --data "grant_type=client_credentials"https://mqssyowmqvgac1y-doc.adb.region.oraclecloudapps.com/ords/user_name/oauth/token
    HTTP/1.1 200 OK
    Date: Mon, 22 Jun 2020 15:17:11 GMT
    Content-Type: application/jsonTransfer-Encoding: chunked
    Connection: keep-alive
    X-Frame-Options: SAMEORIGIN  
    
    {"access_token":"JbOKtAuDgEh2DXx0QhvPGg","token_type":"bearer","expires_in":3600}

    Pour spécifier à la fois client_id et client_secret avec l'argument curl --user, entrez un deux-points pour séparer client_id et client_secret. Si vous spécifiez uniquement le nom d'utilisateur, client_id, curl invite à entrer un mot de passe et vous pouvez entrer client_secret à l'invite.

  8. Utilisez le jeton d'accès pour accéder à la ressource protégée.

    Le jeton obtenu à l'étape précédente est transmis dans l'en-tête Autorisation. Exemple :

    > curl -i -H "Authorization: Bearer JbOKtAuDgEh2DXx0QhvPGg" -X GET https://database_id.adb.region.oraclecloudapps.com/ords/user_name/soda/latest
    HTTP/1.1 200 OK
    Date: Mon, 22 Jun 2020 15:20:58 GMT
    Content-Type: application/json
    Content-Length: 28
    Connection: keep-alive
    X-Frame-Options: SAMEORIGIN
    Cache-Control: private,must-revalidate,max-age=0
    
    
    {"items":[],"hasMore":false}

Voir Configuration de l'accès sécurisé aux services RESTful pour des informations complètes sur l'accès sécurisé aux services RESTful.