Uso de SODA para REST con Autonomous Database

Autonomous Database soporta Simple Oracle Document Access (SODA) para REST.

Visión general del uso de SODA para REST

SODA para REST es un servicio REST implementado previamente que se puede usar para almacenar documentos de JSON en la base de datos.

SODA permite un desarrollo de aplicaciones flexible de estilo NoSQL sin tener que utilizar SQL. Con SODA, los documentos JSON se almacenan en recopilaciones con nombre y se gestionan mediante operaciones de CRUD simples (crear, leer, actualizar y suprimir). Y aunque SQL no es necesario, el JSON almacenado en recopilaciones de SODA sigue siendo totalmente accesible desde SQL cuando sea necesario. Por ejemplo, una aplicación operativa se puede crear completamente mediante SODA (sin SQL), pero los datos se pueden analizar más tarde mediante SQL desde fuera de la aplicación. Autonomous Database SODA ofrece a los desarrolladores de aplicaciones lo mejor de los entornos 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 implementa en ORDS con el siguiente patrón de URL, donde esquema corresponde a un esquema de base de datos activado para REST.

/ords/schema/soda/latest/*

En los siguientes ejemplos se utiliza la herramienta de línea de comandos cURL (http://curl.haxx.se/) para enviar solicitudes REST a la base de datos. Sin embargo, otros clientes y bibliotecas REST de 3a parte también deberían funcionar. En los ejemplos se utiliza 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"

Con estos comandos se insertan tres documentos de JSON en la recopilación de Fruit:

> 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 de 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 recolecció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 Autonomous Database siempre gratis con Oracle Database 21c, Oracle recomienda lo siguiente:

Para los proyectos que se hayan iniciado con 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 iniciados con la versión Oracle Database 21c o posterior, simplemente utilice los metadatos por defecto. Consulte Controladores de SOA para obtener más información.

En estos ejemplos se muestra 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 orden de compra mediante SODA para REST

Oracle proporciona un juego sustancial de documentos de orden de compra JSON, en el archivo de texto libre POList.json, como una matriz de objetos JSON, donde cada objeto representa un documento.

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

Puede cargar este juego de datos de orden de compra de muestra en una recopilación purchaseorder de Autonomous Database con SODA para REST mediante estos 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 Oracle Database JSON Developer's Developer's Developer's Developer's Developer's Developer's Developer's Guide.

Por ejemplo, con la siguiente consulta se selecciona tanto el valor id de un documento de JSON como los valores de la recopilación de órdenes de compra de JSON almacenados en la columna json_document de la tabla purchaseorder. Los valores seleccionados proceden de los campos PONumber, Reference y Requestor de la columna de JSON json_document, que se proyectan desde el documento como columnas virtuales (consulte Cláusula NESTED de SQL 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 Autonomous Database 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 a fin de proporcionar acceso limitado a SODA para REST en Autonomous Database:

  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 ver las acciones disponibles.
    3. En Database Actions, en Administración, seleccione Usuarios de la base de datos.
    4. Haga clic en Crear usuario.
    5. En el área Crear usuario, en el separador Usuario, introduzca 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 de 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 ver las acciones disponibles.
    3. En Database Actions, en Desarrollo, haga clic en SQL para abrir una hoja de trabajo de SQL.
    4. Otorgue los privilegios de usuario necesarios para cargar datos al usuario del paso 1.
      GRANT UNLIMITED TABLESPACE TO user_name;
  3. Cierre la sesión como usuario ADMIN.
  4. Inicie sesión en Database Actions como usuario configurado para utilizar la autenticación OAuth.
  5. En Database Actions, utilice una hoja de trabajo de 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 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 OAUTH PL/SQL 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 de SQL, ejecute el siguiente comando:
    SELECT id, name, client_id, client_secret FROM user_ords_clients;
  7. Obtenga el token 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 soda. Para obtener más información, consulte Acceso a servicios RESTful y SODA para REST.

    Utilice client_id y client_secret en el paso 6 con el siguiente comando.

    En el siguiente ejemplo se utiliza la herramienta de línea de comandos cURL (http://curl.haxx.se/) para enviar solicitudes REST a Autonomous Database. Sin embargo, otros clientes y bibliotecas REST de 3a 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 tanto client_id como 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 de 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 la protección del acceso a los servicios RESTful.