Docs: http://pbgweb1.patorg.org/docs/patorg-web-api-js/
Code: https://gitlab.patorg.de/dev/patorg-web-api-js
Hilfreiche Funktionen zum Arbeiten mit der PatOrg Web API mit JavaScript.
npm i patorg-web-api-js
Im Code selbst gibt es keine signifikanten Breaking Changes. Es ändert sich aber die NPM-Registry von GitLab auf das öffentliche NPM. Damit ändert sich auch der Paketname von @bsw/patorg-web-api-js
auf patorg-web-api-js
.
- Deinstalliere das alte Paket:
npm uninstall @bsw/patorg-web-api-js
- Lösche die Zeile mit
@bsw
aus der.npmrc
-Datei in deinem Projekt. Wenn es der einzige Eintrag war, kannst du die Datei auch löschen. - Aktiviere wieder strengeres SSL:
npm config set strict-ssl true
- Installiere das Paket:
npm i patorg-web-api-js@latest
- Ersetze im Code alle Importe von
@bsw/patorg-web-api-js
aufpatorg-web-api-js
.
- Setze die neue Version in
package.json
. -
npm run release
- Das erzeugt nen neuen Build, lädt neues Paket nach NPM hoch und deployt die neue Doku. Stelle sicher, dass du lokal mit einem berechtigten NPM-Account angemeldet bist und dass fürpublish-docs.js
die richtigen Umgebungsvariablen gesetzt hast. - Committe und pushe deine Änderungen durch Git.
Diese Methode funktioniert wahrscheinlich mit Umstellung auf öffentliche NPM-Registry nicht mehr. Benutze die obere Methode.
Erstelle einen neuen Commit und setze als Commit-Nachricht-Titel die neue Version. Z.B.:
git commit -m "1.0.1"
git push
Anschließend startet das CI/CD von GitLab. Es wird ein neues NPM-Paket veröffentlicht und die Doku-Seite wird neu deployt.
import { setBaseUrl, auth, fetchApi } from "patorg-web-api-js"
// 1. Basis-URL setzen. Muss einmalig ausgeführt werden.
setBaseUrl("http://pbgbuild6/api")
async function main() {
// 2. Authentifizierung
await auth("LGK", "PBG", "lgk")
// 3. Akte lesen
const record = await fetchApi("read", { params: "context=P6.AKTE&id=PPP" })
}
main()
React-Komponenten befinden sich im Unterordner patorg-web-api-js/dist/react
.
Binde PowapiProvider
in deine Root-Komponente ein und setze die baseUrl
:
import { StrictMode } from "react"
import { createRoot } from "react-dom/client"
import App from "./App"
import PowapiProvider from "patorg-web-api-js/dist/react/PowapiProvider"
const root = createRoot(document.getElementById("root")!)
root.render(
<StrictMode>
<PowapiProvider baseUrl="http://pbgbuild6/api">
<App />
</PowapiProvider>
</StrictMode>
)
Nutze den Hook usePowapi()
und setze beim Anmeldevorgang den AccessToken:
import { Page, Header, HeaderTitle, Body } from "blue-react"
import { appLogo, appTitle, getPhrase } from "../shared"
import usePowapi from "patorg-web-api-js/dist/react/usePowapi"
import { auth, fetchApi } from "patorg-web-api-js"
export default function HomePage() {
const { setToken } = usePowapi()
const login = async () => {
const token = await auth("LGK", "PBG", "lgk")
setToken(token)
}
const readRecord = async () => {
const record = await fetchApi("read", { params: "context=P6.AKTE&id=PPP" })
console.log(record)
}
return (
<Page>
<Header>
<HeaderTitle logo={appLogo} appTitle={appTitle}>
{getPhrase("HELLO_WORLD")}
</HeaderTitle>
</Header>
<Body containerClass="container">
<button type="button" className="btn btn-primary" onClick={login}>
Log in
</button>
<button type="button" className="btn btn-primary" onClick={readRecord}>
Read record
</button>
</Body>
</Page>
)
}
PowapiProvider
hat die Komponente RefreshAccessToken
eingebunden, die dafür sorgt, dass der AccessToken im Hintergrund rechtzeitig vor Ablauf erneuert wird.
Props zu PowapiProvider
Für die Nutzung von TextEncoder
und TextDecoder
in utils.ts musste eine Polyfill-Lösung für Node.js integriert werden.
In einem Projekt mit Webpack wirst du dann so eine Meldung erhalten:
WARNING in ./node_modules/patorg-web-api-js/dist/utils.js 13:15-30
Module not found: Error: Can't resolve 'util' in 'C:\projects\florence\Florence2\node_modules\patorg-web-api-js\dist'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "util": require.resolve("util/") }'
- install 'util'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "util": false }
Wie in der Meldung vorgeschlagen, kannst du in der webpack.config.js angeben, dass kein Fallback für Node.js's util
genutzt werden soll:
module.exports = {
// ...
resolve: {
// ...
fallback: {
util: false
}
}
// ...
}