Uso del SODA para REST con Autonomous AI Database

La base de datos de IA autónoma soporta el acceso simple a documentos de Oracle (SODA) para REST.

Visión general del uso de SODA para REST

SODA para REST es un servicio REST de despliegue previo que se puede utilizar para almacenar documentos JSON en la base de datos.

SODA permite el desarrollo de aplicaciones flexibles de estilo NoSQL sin tener que utilizar SQL. Con SODA, los documentos JSON se almacenan en recopilaciones con nombre y se gestionan mediante operaciones CRUD simples (crear, leer, actualizar y suprimir). Y aunque SQL no es necesario, JSON almacenado en recopilaciones de SODA sigue siendo totalmente accesible desde SQL cuando es necesario. Por ejemplo, una aplicación operativa se puede crear completamente con SODA (sin SQL), pero luego los datos se pueden analizar posteriormente con SQL desde fuera de la aplicación. Autonomous AI Database SODA ofrece a los desarrolladores de aplicaciones lo mejor de los mundos NoSQL y SQL: desarrollo de aplicaciones rápido, flexible y escalable sin perder la capacidad de aprovechar SQL para análisis e informes.

SODA para REST se despliega en ORDS bajo el siguiente patrón de URL, donde esquema corresponde a un esquema de base de datos activado para REST.

/ords/schema/soda/latest/*

Los siguientes ejemplos utilizan la herramienta de línea de comandos cURL (http://curl.haxx.se/) para enviar solicitudes de REST a la base de datos. Sin embargo, otros clientes y bibliotecas REST de 3ª parte también deberían funcionar. Los ejemplos utilizan el esquema de base de datos ADMIN, que está activado para REST. Puede usar SODA para REST con comandos cURL desde Oracle Cloud Shell.

Este comando crea una nueva recopilación denominada "fruit" en el esquema ADMIN:

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

Estos comandos insertan tres documentos JSON en la recopilación de frutas:

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

Este ejemplo recupera un documento JSON almacenado de la recopilación:

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

Esta consulta SQL accede a la recopilación de frutas:

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

La consulta devuelve estas tres filas:

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

Si utiliza una base de datos de IA autónoma siempre gratuita con Oracle AI Database 26ai, Oracle recomienda lo siguiente:

Para los proyectos que se han iniciado mediante una versión de base de datos anterior a Oracle Database 21c, especifique explícitamente los metadatos para la recopilación por defecto, como se especifica en el ejemplo de la sección Controladores de SODA. Para los proyectos que han comenzado a utilizar la versión Oracle Database 21c o posterior, utilice los metadatos por defecto. Consulte Controladores SODA para obtener más información.

Estos ejemplos muestran un subjuego de las funciones de SODA y SQL/JSON. Puede obtener más información en los siguientes enlaces:

Carga de datos de muestra de órdenes de compra mediante SODA para REST

Oracle proporciona un conjunto sustancial de documentos de pedido de compra JSON, en el archivo de texto sin formato POList.json, como una matriz de objetos JSON, donde cada objeto representa un documento.

Los siguientes ejemplos utilizan la herramienta de línea de comandos cURL (http://curl.haxx.se/) para enviar solicitudes de REST a la base de datos. Sin embargo, otros clientes y bibliotecas REST de 3ª parte también deberían funcionar. Los ejemplos utilizan el esquema de base de datos ADMIN, que está activado para REST. Puede usar SODA para REST con comandos cURL desde Oracle Cloud Shell.

Puede cargar este juego de datos de orden de compra de ejemplo en una recopilación purchaseorder en su base de datos de IA autónoma con SODA para REST mediante los siguientes comandos curl:

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"

A continuación, puede utilizar estos datos de orden de compra para probar ejemplos en la Guía del desarrollador de Oracle AI Database JSON.

Por ejemplo, la siguiente consulta selecciona tanto id de un documento JSON como valores de la recopilación de pedidos de compra JSON almacenada en la columna json_document de la tabla purchaseorder. Los valores seleccionados proceden de los campos PONumber, Reference y Requestor de la columna JSON json_document, que se proyectan desde el documento como columnas virtuales (consulte Cláusula SQL NESTED en lugar de JSON_TABLE para obtener más información).

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

Puede obtener más información en los siguientes enlaces:

Uso de SODA para REST con credenciales de cliente OAuth

Puede acceder a SODA para REST en la base de datos de IA autónoma mediante la autenticación OAuth. Según la aplicación, el acceso a SODA para REST con autenticación OAuth puede mejorar el rendimiento y la seguridad.

Realice los siguientes pasos para utilizar la autenticación OAuth para proporcionar acceso limitado a SODA para REST en la base de datos de IA autónoma:

  1. Como usuario ADMIN, acceda a Database Actions y cree un usuario con los privilegios necesarios.
    1. Acceda a Database Actions como ADMIN.
      Consulte Acceso a Database Actions como ADMIN para obtener más información.
    2. En Database Actions, haga clic en icono de navegación para mostrar las acciones disponibles.
    3. En Database Actions, en Administración, seleccione Usuarios de base de datos.
    4. Haga clic en Crear usuario.
    5. En el área Crear usuario, en el separador Usuario, introduzca Nombre de usuario y una Contraseña y confirme la contraseña.
    6. Seleccione Acceso web.
    7. En el área Crear usuario, seleccione el separador Roles otorgados y otorgue DWROLE al usuario.
    8. Haga clic en Crear usuario.
  2. Utilice una hoja de trabajo SQL en Database Actions para otorgar los privilegios de usuario necesarios para cargar datos.
    1. Acceda a Database Actions como ADMIN.
      Consulte Acceso a Database Actions como ADMIN para obtener más información.
    2. En Database Actions, haga clic en icono de navegación para mostrar las acciones disponibles.
    3. En Database Actions, en Desarrollo, haga clic en SQL para abrir una hoja de trabajo SQL.
    4. Otorgue los privilegios de usuario necesarios para cargar datos al usuario desde el paso 1.
      GRANT UNLIMITED TABLESPACE TO user_name;
  3. Desconéctese como usuario ADMIN.
  4. Conéctese a Database Actions como usuario que está configurando para utilizar la autenticación OAuth.
  5. En Database Actions, utilice una hoja de trabajo SQL para registrar el cliente OAuth.
    1. Registre el cliente OAuth.
      Por ejemplo, introduzca los siguientes comandos en la hoja de trabajo de SQL, donde debe proporcionar los valores adecuados para el usuario y la aplicación cliente.
      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. En la hoja de trabajo de SQL, haga clic en Ejecutar script para ejecutar el comando.

    Consulte Referencia del paquete PL/SQL de OAUTH para obtener más información.

    Esto registra un cliente denominado my_client para acceder al privilegio my_priv mediante las credenciales de cliente OAuth.

  6. Obtenga los valores client_id y client_secret necesarios para generar el token de acceso.
    Por ejemplo, en la hoja de trabajo SQL ejecute el siguiente comando:
    SELECT id, name, client_id, client_secret FROM user_ords_clients;
  7. Obtenga el símbolo de acceso. Para obtener un token de acceso, envíe una solicitud REST GET a database_ORDS_urluser_name/oauth/token.

    database_ORDS_url está disponible en Database Actions, en Servicios relacionados, en la tarjeta RESTful Servicios y refrescos. Consulte Acceso a servicios RESTful y SODA para REST para obtener más información.

    En el siguiente comando, utilice client_id y client_secret que obtuvo en el paso 6.

    En el siguiente ejemplo se utiliza la herramienta de línea de comandos cURL (http://curl.haxx.se/) para enviar solicitudes REST a la base de datos de IA autónoma. Sin embargo, otros clientes y bibliotecas REST de 3ª parte también deberían funcionar.

    Puede utilizar la herramienta de línea de comandos cURL para enviar la solicitud REST GET. Por ejemplo:

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

    Para especificar client_id y client_secret con el argumento curl --user, introduzca dos puntos para separar client_id y client_secret. Si sólo especifica el nombre de usuario, client_id, curl solicita una contraseña y puede introducir client_secret en la petición de datos.

  8. Utilice el token de acceso para acceder al recurso protegido.

    El token obtenido en el paso anterior se transfiere a la cabecera Autorización. Por ejemplo:

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

Consulte Configuración de acceso seguro a servicios RESTful para obtener información completa sobre el acceso seguro a servicios RESTful.