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 vorab bereitgestellter REST-Service, mit dem JSON-Dokumente in Ihrer Datenbank gespeichert werden können.

SODA ermöglicht eine flexible Anwendungsentwicklung im NoSQL-Stil, ohne SQL verwenden zu müssen. Mit SODA werden JSON-Dokumente in benannten Sammlungen gespeichert und mit einfachen CRUD-Vorgängen (Erstellen, Lesen, Aktualisieren und Löschen) verwaltet. Und obwohl SQL nicht erforderlich ist, ist JSON, das in SODA-Collections gespeichert ist, 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 von 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 nutzen.

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

/ords/schema/soda/latest/*

Die folgenden Beispiele verwenden das cURL-Befehlszeilentool (http://curl.haxx.se/), um REST-Anforderungen an die Datenbank weiterzuleiten. Andere REST-Clients und -Bibliotheken der 3. Partei 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 der 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 Frucht-Sammlung 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 Frucht-Collection 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 vom Typ "Immer kostenlos" mit Oracle Database 23ai verwenden, empfiehlt Oracle Folgendes:

Für Projekte, die mit einem Datenbankrelease vor Oracle Database 21c gestartet wurden, geben Sie explizit die Metadaten für die Standarderfassung 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 eine Teilmenge der SODA- und SQL/JSON-Funktionen. In den folgenden Themen finden Sie weitere Informationen:

Beispieldaten für Bestellungen mit SODA for REST laden

Oracle stellt ein umfangreiches Set von JSON-Bestelldokumenten in der Nur-Text-Datei POList.json als JSON-Array von Objekten bereit, wobei jedes dieser Objekte ein Dokument darstellt.

Die folgenden Beispiele verwenden das cURL-Befehlszeilentool (http://curl.haxx.se/), um REST-Anforderungen an die Datenbank weiterzuleiten. Andere REST-Clients und -Bibliotheken der 3. Partei 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 der Oracle Cloud Shell verwenden.

Sie können dieses Beispiel-Kaufauftrags-Dataset mit den folgenden curl-Befehlen in eine Collection purchaseorder in Ihrer 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"

Anhand dieser Bestelldaten können Sie dann Beispiele im Oracle Database JSON Developer's Guide ausprobieren.

Beispiel: Die folgende Abfrage wählt sowohl die id eines JSON-Dokuments als auch Werte aus der JSON-Bestellauflistung aus, die in Spalte json_document der Tabelle purchaseorder gespeichert ist. Die ausgewählten Werte stammen aus den Feldern PONumber, Reference und Requestor der JSON-Spalte json_document, die aus dem Dokument als virtuelle Spalten projiziert 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 mit der OAuth-Authentifizierung auf SODA for REST in Autonomous Database zugreifen. Je nach Anwendung kann der Zugriff auf SODA for REST mit der OAuth-Authentifizierung die Performance und Sicherheit verbessern.

Führen Sie die folgenden Schritte aus, um die OAuth-Authentifizierung zu verwenden und einen eingeschränkten Zugriff auf SODA for REST in Autonomous Database bereitzustellen:

  1. Greifen Sie als ADMIN-Benutzer auf Database Actions zu, und erstellen Sie einen Benutzer mit den erforderlichen Berechtigungen.
    1. Greifen Sie als ADMIN auf Database Actions zu.
      Weitere Informationen finden Sie unter Auf Database Actions als ADMIN zugreifen.
    2. Klicken Sie in Database Actions auf Navigationssymbol, um die verfügbaren Aktionen anzuzeigen.
    3. Wählen Sie unter Administration in Database Actions die Option Database Users aus.
    4. Klicken Sie auf Benutzer erstellen.
    5. Geben Sie im Bereich Benutzer erstellen auf der Registerkarte Benutzer den 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 DWROLE.
    8. Klicken Sie auf Benutzer erstellen.
  2. Verwenden Sie ein SQL-Arbeitsblatt in Database Actions, um Benutzerberechtigungen zu erteilen, die zum Laden von Daten erforderlich sind.
    1. Greifen Sie als ADMIN auf Database Actions zu.
      Weitere Informationen finden Sie unter Auf Database Actions als ADMIN zugreifen.
    2. Klicken Sie in Database Actions 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 die erforderlichen Benutzerberechtigungen, um Daten aus Schritt 1 an den Benutzer zu laden.
      GRANT UNLIMITED TABLESPACE TO user_name;
  3. Melden Sie sich als ADMIN-Benutzer ab.
  4. Melden Sie sich bei Database Actions als Benutzer an, der die OAuth-Authentifizierung verwendet.
  5. Registrieren Sie in Database Actions den OAuth-Client mit einem SQL-Arbeitsblatt.
    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 Package Reference.

    Dadurch wird ein Client mit dem Namen my_client registriert, um mit den OAuth-Clientzugangsdaten auf die Berechtigung my_priv zuzugreifen.

  6. Rufen Sie die erforderlichen Werte für client_id und client_secret ab, um das Zugriffstoken zu generieren.
    Beispiel: Führen Sie im SQL Worksheet den folgenden Befehl aus:
    SELECT id, name, client_id, client_secret FROM user_ords_clients;
  7. Rufen Sie das Zugriffstoken auf. Um ein Zugriffstoken abzurufen, senden Sie eine REST GET-Anforderung an database_ORDS_urluser_name/oauth/token.

    Die database_ORDS_url ist über Database Actions unter Zugehörige Services auf der Karte RESTful Services und Soda verfügbar. Weitere Informationen finden Sie unter Auf RESTful-Services und SODA for REST zugreifen.

    Verwenden Sie im folgenden Befehl client_id und client_secret, die Sie in Schritt 6 abgerufen haben.

    Im folgenden Beispiel wird das Befehlszeilentool cURL (http://curl.haxx.se/) verwendet, um REST-Anforderungen an Autonomous Database weiterzuleiten. Andere REST-Clients und -Bibliotheken der 3. Partei sollten jedoch ebenfalls funktionieren.

    Mit dem Befehlszeilentool cURL können Sie die Anforderung REST GET weiterleiten. Beispiel:

    > 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 ein, um client_id und client_secret zu trennen. Wenn Sie nur den Benutzernamen client_id angeben, fordert curl zur Eingabe eines Kennworts auf, 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 erhaltene Token wird im Autorisierungsheader übergeben. Beispiel:

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