7 min leestijd

Oracle Backend with Firebase APIs, Deel 1: Wat het is en hoe je het opzet op Oracle AI Database 26ai


Deel 1 van een tweedelige reeks over Oracle Backend with Firebase APIs: Deel 1 - Wat het is en hoe je het opzet · Deel 2 - Hands-on met authenticatie, database en opslag.

Wat is Firebase en waarom zou ik er als databasedeveloper om geven?

Firebase is Googles Backend as a Service (BaaS) voor mobiele en webapplicaties. In plaats van zelf een volledige backend te bouwen, krijgt een appdeveloper client-SDK’s voor veelvoorkomende behoeften zoals authenticatie, een documentdatabase, bestandsopslag en realtime updates.

Waarom is dat relevant voor een Oracle-databasedeveloper? De meeste databaseprojecten hebben dit vandaag misschien niet nodig, maar de vraag duikt op zodra een product ook een native mobiele of webclient nodig heeft. Het appteam verwacht veilige API’s, authenticatie en datasynchronisatie, en iemand moet die bouwen en beheren.

Bij eerdere projecten loste ik dat op door de benodigde functionaliteit van Oracle Database via REST API’s beschikbaar te maken. Daar is niets mis mee. Het levert wel een extra API-laag op die ik moet ontwerpen, beveiligen, beheren en ondersteunen. Een backend in Firebase-stijl bundelt veel van dat terugkerende werk achter een SDK die appdevelopers al begrijpen.

Oracle heeft dat model nu voor zijn eigen database uitgebracht. De officiële naam is Oracle Backend with Firebase APIs; de CLI en packages noemen het Fusabase.

Wat Oracle heeft gebouwd

Het is een feature van Oracle REST Data Services (ORDS). Er is geen afzonderlijke cloudservice of centrale beheerlaag die je operationeel moet houden, en je hoeft geen bijkomend product te provisioneren. Je installeert ORDS 26.1 of later tegen een Oracle AI Database en voert ords fusabase install uit in de shell van het besturingssysteem waarop de ORDS CLI is geïnstalleerd.

De client-SDK’s voor JavaScript, Android, iOS en Flutter (plus gewone REST) praten met ORDS; ORDS stelt endpoints beschikbaar onder het basispad van je databaseschema; PL/SQL-packages in de database doen het werk. Dus collection(db, "users") in je app wordt een REST-call, die op zijn beurt SQL wordt tegen JSON-collections in een schema dat van jou is.

Het aanbod is echt Firebase-achtig: authenticatie (Basic, LDAP, IDCS, plus Google/Facebook/GitHub), een document database in Firestore-stijl met security rules, object storage (DBFS of OCI Object Storage), vector collections met similarity search, en een App Trust attestation-laag.

Waarom ik dit belangrijk vind als APEX-developer

Fusabase neemt iets weg dat ik telkens opnieuw moet uitleggen aan mobile developers. Wanneer een APEX-project ook een native of Flutter-frontend nodig heeft, is het gebruikelijke antwoord “we zullen een aantal dingen REST-enablen”. Iemand moet dan de ORDS-handlers, authenticatie en het permissiemodel bouwen.

Fusabase geeft dat team een vertrouwde client-SDK terwijl de data in dezelfde PDB blijft als de APEX-app, onder dezelfde constraints, dezelfde triggers, dezelfde backups. Geen sync-laag, geen tweede source of truth.

Het biedt ook functies die mobiele applicaties vaak nodig hebben, waaronder realtime updates via WebSockets. Datawijzigingen kunnen meteen bij de clients terechtkomen in plaats van pas na een willekeurig refreshinterval.

Installatiegids

Deze gids toont hoe ik alles heb opgezet, inclusief de exacte commando’s die ik gebruikte. Bij elke stap staat of de commando’s thuishoren in SQL*Plus, op de ORDS-host of op een lokale ontwikkelmachine.

Vereisten

Deze gids gaat ervan uit dat de database en ORDS al draaien, in de cloud of lokaal.

Stap 1: Een databaseuser aanmaken

Voer dit blok uit in SQL*Plus als SYSDBA; we maken de user VITO aan.

ALTER USER SYS IDENTIFIED BY "<DB_ADMIN_PASSWORD>" CONTAINER=ALL;
ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE;
ALTER SESSION SET CONTAINER=ORCLPDB1;

CREATE USER VITO IDENTIFIED BY "<VITO_PASSWORD>"
  DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
GRANT CREATE SESSION, DB_DEVELOPER_ROLE TO VITO;

Stap 2: Het schema ORDS-enablen

Blijf in SQL*Plus en maak rechtstreeks verbinding met de doel-PDB als VITO. Deze call stelt het schema via ORDS beschikbaar; Fusabase zelf wordt hiermee nog niet geïnstalleerd.

CONNECT VITO/"<VITO_PASSWORD>"@127.0.0.1:1521/ORCLPDB1

BEGIN
  ORDS.ENABLE_SCHEMA(
    p_enabled             => TRUE,
    p_schema              => 'VITO',
    p_url_mapping_type    => 'BASE_PATH',
    p_url_mapping_pattern => 'vito',
    p_auto_rest_auth      => TRUE
  );
  COMMIT;
END;
/

Stap 3: De Fusabase-vereisten configureren

Volg Oracles install- en configuratiegids voor de officiële instructies. De commando’s hieronder vatten samen wat ik in mijn omgeving heb uitgevoerd.

Compatibiliteit

Voer dit uit in SQL*Plus als SYSDBA vanuit de CDB-root. De instelling wordt actief na de databaseherstart in het blok.

ALTER SYSTEM SET COMPATIBLE='23.9.0' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

De compatibiliteit verhogen is vrijwel onomkeerbaar. Neem eerst een back-up - dat deed ik ook.

Extended String Support inschakelen

Voer dit uit in dezelfde SYSDBA-sessie in SQL*Plus. De eerste twee statements richten zich vanuit de CDB-root op de PDB; de overige statements worden uitgevoerd nadat je naar die PDB bent overgeschakeld.

ALTER PLUGGABLE DATABASE <YOUR-PDB> CLOSE;
ALTER PLUGGABLE DATABASE <YOUR-PDB> OPEN UPGRADE;
ALTER SESSION SET CONTAINER=<YOUR-PDB>;
ALTER SYSTEM SET max_string_size = extended;
@?/rdbms/admin/utl32k.sql
ALTER PLUGGABLE DATABASE <YOUR-PDB> CLOSE;
ALTER PLUGGABLE DATABASE <YOUR-PDB> OPEN;

De TDE-wallet en mastersleutel configureren

Voer dit uit in SQL*Plus als SYSDBA vanuit de CDB-root. Herstart de database nadat je wallet_root hebt ingesteld en ga daarna verder met de overige statements.

ALTER SYSTEM SET wallet_root='/opt/oracle/admin/ORCLCDB/wallet' SCOPE=SPFILE;
-- herstart de database, daarna:
ALTER SYSTEM SET tde_configuration='KEYSTORE_CONFIGURATION=FILE' SCOPE=BOTH;
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY "<TDE_WALLET_PASSWORD>";
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<TDE_WALLET_PASSWORD>" CONTAINER=ALL;
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<TDE_WALLET_PASSWORD>" WITH BACKUP CONTAINER=ALL;
ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE FROM KEYSTORE
  IDENTIFIED BY "<TDE_WALLET_PASSWORD>";

Controleer alle drie voor je het opnieuw probeert: COMPATIBLE op 23.9.0, MAX_STRING_SIZE op EXTENDED, en v$encryption_wallet die OPEN / LOCAL_AUTOLOGIN rapporteert voor elke container.

Stap 4: Fusabase via ORDS installeren

We kunnen Fusabase via ords installeren vanuit de shell op de databasehost van onze server.

sudo -iu oracle
/usr/local/bin/ords --config /etc/ords/config fusabase install
exit

De installatie maakt de systeemcomponenten aan, maar het VITO-schema moet nog voor Fusabase worden geactiveerd. In mijn omgeving nam ik een shortcut: ik kende DBA tijdelijk toe aan VITO en trok het privilege meteen daarna weer in. Dit is een ruim privilege; gebruik in een productieomgeving bij voorkeur de gedocumenteerde aanpak met minimale rechten.

Open vanuit de shell op de databasehost SQL*Plus als SYSDBA:

sqlplus / as sysdba

Ken vervolgens de tijdelijke privileges toe in de SYSDBA-sessie in SQL*Plus:

ALTER SESSION SET CONTAINER = ORCLPDB1;

GRANT DBA TO VITO;
GRANT INHERIT PRIVILEGES ON USER VITO TO BAASSYS;

EXIT;

Start vanuit de shell op de databasehost een nieuwe SQL*Plus-sessie zonder automatisch verbinding te maken:

sqlplus /nolog

Maak in die SQL*Plus-sessie als VITO verbinding met de doel-PDB en activeer het schema voor Fusabase:

CONNECT VITO/"<VITO_PASSWORD>"@//127.0.0.1:1521/ORCLPDB1

SHOW USER;
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual;

BEGIN
  OBAAS_ADMIN.OBAAS_ENABLE_SCHEMA(
    'VITO',
    'BASE_PATH',
    'vito',
    FALSE
  );
END;
/
COMMIT;
EXIT;

Maak vanuit de shell op de databasehost opnieuw verbinding als SYSDBA:

sqlplus / as sysdba

Trek het tijdelijke privilege in SQL*Plus weer in:

ALTER SESSION SET CONTAINER = ORCLPDB1;
REVOKE DBA FROM VITO;
EXIT;

Herstart ten slotte ORDS vanuit de shell op de ORDS-host, zodat ORDS de geïnstalleerde feature en schemaconfiguratie inlaadt:

sudo systemctl restart ords
sudo systemctl status ords --no-pager

Validatie

Als alles goed is gegaan, open je het ORDS-endpoint in een webbrowser. De landingspagina zou nu de nieuwe service moeten tonen:

ORDS Dashboard

Na het aanmelden zou je het Fusabase-dashboard moeten zien:

BaaS Dashboard

Een project opzetten

Deel 2 behandelt de features in detail. Voorlopig maken we één quickstartproject aan, zodat we de installatie vanuit een clientapplicatie kunnen testen.

Maak in de Fusabase Console in je browser een project aan en selecteer de quickstartoptie:

BaaS Create Project BaaS Create BaaS Create BaaS Create BaaS Create BaaS Create BaaS Create

Kies vervolgens een lege werkmap op je lokale ontwikkelmachine en voer deze commando’s uit in de shell. Ze maken een klein Node.js-project aan en installeren de Fusabase JavaScript-SDK; ze worden niet uitgevoerd op de database of binnen ORDS.

npm init -y
npm install fusabase
touch index.js

Kopieer de configuratie die de Fusabase Console heeft gegenereerd naar index.js en initialiseer daarna de SDK-clients. De waarden hieronder komen uit mijn project; gebruik de waarden die voor jouw project zijn gegenereerd.

import { initializeApp } from "fusabase/app";
import { getOracledb } from "fusabase/oracledb";
import { getStorage } from "fusabase/storage";
import { getAuth } from "fusabase/auth";
const fusabaseConfig = {
    "schema": "vito",
    "app_name": "WEBDEMO",
    "app_type": "WEB",
    "app_id": "58D64B0C789F4307E063F40D1FAC19AD",
    "objs_type": "dbfs",
    "project_id": "58D6470B91BF4302E063F40D1FAC8719",
    "storage_bucket": "dbfs_YALOWOGCQGWKBQN",
    "auth_type": "base",
    "auth_id": "58D6470B91C34302E063F40D1FAC8719",
    "ords_host": "https://oracle.vvanhecke.be/ords/vito/"
};

// app initialiseren
const fusabase_app = initializeApp(fusabaseConfig);

// database instance ophalen
const fusabase_db = getOracledb(fusabase_app);

// object store instance ophalen
const fusabase_storage = getStorage(fusabase_app);

// auth instance ophalen
const fusabase_auth = getAuth(fusabase_app);

console.log(fusabase_db.toJSON());

Voer het bestand uit vanuit diezelfde lokale ontwikkelshell:

node index.js

De uitvoer zou een Oracle Database-client moeten identificeren:

{ appName: '[DEFAULT]', type: 'oracledb' }

Dit bevestigt dat de SDK de gegenereerde configuratie heeft geladen en de databaseclient heeft aangemaakt. In het volgende deel gebruiken we die client om de afzonderlijke services uit te proberen.

Volgende: Deel 2 - Feature tour en basisconfiguratie