SODA for REST mit Autonomous Database verwenden

Autonomous Database unterstützt Simple Oracle Document Access (SODA) für REST.

Überblick über die Verwendung von SODA for REST

SODA for REST ist ein im Voraus bereitgestellter REST-Service, mit dem JSON-Dokumente in der Datenbank gespeichert werden können.

SODA ermöglicht eine flexible Anwendungsentwicklung im NoSQL-Stil, bei der kein SQL verwendet werden muss. Mit SODA werden JSON-Dokumente in benannten Collections gespeichert und mit einfachen CRUD-Vorgängen (Erstellen, Lesen, Aktualisieren und Löschen) verwaltet. Und auch ohne SQL sind JSON-Dokumente, die in SODA-Sets gespeichert sind, bei Bedarf weiterhin vollständig über SQL zugänglich. Beispiel: Eine operative Anwendung kann vollständig mit SODA (ohne SQL) erstellt werden, die Daten können jedoch später mit SQL außerhalb der Anwendung analysiert werden. Autonomous Database SODA bietet Anwendungsentwicklern das Beste aus der NoSQL- und SQL-Welt - schnelle, flexible und skalierbare Anwendungsentwicklung, ohne die Möglichkeit zu verlieren, SQL für Analysen und Berichte zu verwenden.

SODA for REST wird in ORDS unter dem folgenden URL-Muster bereitgestellt, wobei schemaeinem REST-fähigen Datenbankschema entspricht.

/ords/schema/soda/latest/*

In den folgenden Beispielen wird das Befehlszeilen-Tool cURL (http://curl.haxx.se/) verwendet, um REST-Anforderungen an die Datenbank weiterzuleiten. Andere REST-Clients und -Bibliotheken von 3rd Party sollten jedoch ebenfalls funktionieren. In den Beispielen wird das Datenbankschema ADMIN verwendet, das REST-fähig ist. Sie können SODA for REST mit cURL-Befehlen in Oracle Cloud Shell verwenden.

Mit diesem Befehl wird eine neue Collection namens "fruit" im Schema ADMIN erstellt:

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

Diese Befehle fügen drei JSON-Dokumente in die Collection "fruit" ein:

> 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"...

In diesem Beispiel wird ein gespeichertes JSON-Dokument aus der Collection abgerufen:

> 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
}

Diese SQL-Abfrage greift auf die Collection "fruit" zu:

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

Die Abfrage gibt die folgenden drei Zeilen zurück:

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

Wenn Sie Autonomous Database mit Oracle Database 23ai vom Typ "Immer kostenlos" verwenden, empfiehlt Oracle Folgendes:

Geben Sie für Projekte, die mit einem Datenbankrelease vor Oracle Database 21c gestartet wurden, explizit die Metadaten für die Standardsammlung an, wie im Beispiel im Abschnitt "SODA-Treiber" angegeben. Verwenden Sie für Projekte, die mit Release Oracle Database 21c oder höher gestartet wurden, einfach die Standardmetadaten. Weitere Informationen finden Sie unter SODA-Treiber.

Diese Beispiele zeigen einen Teil der SODA- und SQL/JSON-Features. In den folgenden Themen finden Sie weitere Informationen:

Beispieldaten für Bestellungen mit SODA for REST laden

Oracle stellt eine umfangreiche Gruppe von JSON-Bestelldokumenten in der Nur-Text-Datei POList.json als JSON-Array von Objekten bereit, bei denen jedes derartige Objekt ein Dokument darstellt.

In den folgenden Beispielen wird das Befehlszeilen-Tool cURL (http://curl.haxx.se/) verwendet, um REST-Anforderungen an die Datenbank weiterzuleiten. Andere REST-Clients und -Bibliotheken von 3rd Party sollten jedoch ebenfalls funktionieren. In den Beispielen wird das Datenbankschema ADMIN verwendet, das REST-fähig ist. Sie können SODA for REST mit cURL-Befehlen aus Oracle Cloud Shell verwenden.

Sie können dieses Beispiel-Bestell-Dataset mit den folgenden curl-Befehlen in eine Collection purchaseorder in Autonomous Database mit SODA for REST laden:

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"

Anschließend können Sie diese Bestelldaten verwenden, um Beispiele in der JSON-Entwicklerdokumentation zu Oracle Database zu testen.

Beispiel: Die folgende Abfrage wählt sowohl die id eines JSON-Dokumentes als auch Werte aus der JSON-Bestellungs-ID aus, die in Spalte json_document der Tabelle purchaseorder gespeichert sind. Die ausgewählten Werte stammen aus den Feldern PONumber, Reference und Requestor der JSON-Spalte json_document, die aus dem Dokument als virtuelle Spalten prognostiziert werden (weitere Informationen finden Sie unter SQL NESTED-Klausel anstelle von JSON_TABLE).

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

In den folgenden Themen finden Sie weitere Informationen:

SODA for REST mit OAuth-Clientzugangsdaten verwenden

Sie können in Autonomous Database mit der OAuth-Authentifizierung auf SODA for REST zugreifen. Der Zugriff auf SODA for REST mit OAuth-Authentifizierung kann je nach Anwendung die Performance und Sicherheit verbessern.

Führen Sie die folgenden Schritte aus, um mit der OAuth-Authentifizierung begrenzten Zugriff auf SODA for REST in Autonomous Database zu erhalten:

  1. Rufen Sie als ADMIN-Benutzer Database Actions auf, und erstellen Sie einen Benutzer mit den erforderlichen Berechtigungen.
    1. Als ADMIN auf Database Actions zugreifen
      Weitere Informationen finden Sie unter Als ADMIN auf Database Actions zugreifen.
    2. Klicken Sie unter "Datenbankaktionen" auf Navigationssymbol, um die verfügbaren Aktionen anzuzeigen.
    3. Wählen Sie in den Datenbankaktionen unter Administration die Option Datenbankbenutzer aus.
    4. Klicken Sie auf Benutzer erstellen.
    5. Geben Sie im Bereich Benutzer erstellen auf der Registerkarte Benutzer einen Benutzernamen und ein Kennwort ein, und bestätigen Sie das Kennwort.
    6. Wählen Sie Webzugriff aus.
    7. Wählen Sie im Bereich Benutzer erstellen die Registerkarte Erteilte Rollen aus, und erteilen Sie dem Benutzer die Berechtigung DWROLE.
    8. Klicken Sie auf Benutzer erstellen.
  2. Verwenden Sie ein SQL-Arbeitsblatt in Database Actions, um Benutzerberechtigungen zum Laden von Daten zu erteilen.
    1. Als ADMIN auf Database Actions zugreifen
      Weitere Informationen finden Sie unter Als ADMIN auf Database Actions zugreifen.
    2. Klicken Sie unter "Datenbankaktionen" auf Navigationssymbol, um die verfügbaren Aktionen anzuzeigen.
    3. Klicken Sie in Database Actions unter Entwicklung auf SQL, um ein SQL-Arbeitsblatt zu öffnen.
    4. Erteilen Sie dem Benutzer ab Schritt 1 die erforderlichen Benutzerberechtigungen zum Laden von Daten.
      GRANT UNLIMITED TABLESPACE TO user_name;
  3. Melden Sie sich als ADMIN-Benutzer ab.
  4. Melden Sie sich bei Database Actions als der Benutzer an, für den die Verwendung der OAuth-Authentifizierung eingerichtet ist.
  5. Verwenden Sie in Database Actions ein SQL-Arbeitsblatt, um den OAuth-Client zu registrieren.
    1. Registrieren Sie den OAuth-Client.
      Beispiel: Geben Sie die folgenden Befehle in das SQL-Arbeitsblatt ein, in dem Sie die entsprechenden Werte für den Benutzer und die Clientanwendung angeben.
      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. Klicken Sie im SQL-Arbeitsblatt auf Skript ausführen, um den Befehl auszuführen.

    Weitere Informationen finden Sie unter OAUTH PL/SQL-Paketreferenz.

    Dadurch wird ein Client mit dem Namen my_client registriert, um mit den OAuth-Clientzugangsdaten auf die Berechtigung my_priv zugreifen zu können.

  6. Rufen Sie die client_id und das client_secret ab, die zum Generieren des Zugriffstokens erforderlich sind.
    Beispiel: Führen Sie im SQL-Arbeitsblatt den folgenden Befehl aus:
    SELECT id, name, client_id, client_secret FROM user_ords_clients;
  7. Rufen Sie das Zugriffstoken ab. Um ein Zugriffstoken abzurufen, senden Sie eine REST GET-Anforderung an database_ORDS_urluser_name/oauth/token.

    database_ORDS_url ist über Datenbankaktionen unter Zugehörige Services in der Karte RESTful Services und Soda verfügbar. Weitere Informationen finden Sie unter Auf RESTful Services und SODA for REST zugreifen.

    Verwenden Sie das client_id und das client_secret, die Sie in Schritt 6 abgerufen haben.

    Im folgenden Beispiel wird das Befehlstool cURL (http://curl.haxx.se/) verwendet, um REST-Anforderungen an Autonomous Database zu übermitteln. Andere REST-Clients und -Bibliotheken von 3rd Party sollten jedoch ebenfalls funktionieren.

    Sie können das Befehlszeilentool cURL verwenden, um die REST GET-Anforderung zu übermitteln. Beispiele:

    > 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}

    Um sowohl client_id als auch client_secret mit dem Argument curl --user anzugeben, geben Sie einen Doppelpunkt zum Trennen von client_id und client_secret ein. Wenn Sie nur den Benutzernamen client_id, angeben, fragt curl nach einem Kennwort, und Sie können client_secret an der Eingabeaufforderung eingeben.

  8. Mit dem Zugriffstoken können Sie auf die geschützte Ressource zugreifen.

    Das im vorherigen Schritt abgerufene Token wird im Autorisierungsheader übergeben. Beispiele:

    > 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}

Vollständige Informationen zum sicheren Zugriff auf RESTful-Services finden Sie unter Sicheren Zugriff auf RESTful-Services konfigurieren.