[sword-devel] Prototyping node-sword-interface web service
Aaron Rainbolt
arraybolt3 at gmail.com
Sun Aug 11 01:56:07 EDT 2024
Haven't been replying since I'm busy, but this is awesome. Thank you
for actually giving my idea a shot! I'll have to experiment with it :)
On Sun, 4 Aug 2024 21:00:24 +0200
Tobias Klein <contact at tklein.info> wrote:
> Hi Aaron & all,
>
> so, this whole thread about SWORD over network inspired me to play
> with existing technology a bit.
> The goal: Run Ezra Bible App accessing the SWORD modules via a remote
> server instead of locally.
>
> I implemented a small web service API based on node-sword-interface
> and expressjs.
> See https://github.com/ezra-bible-app/ezra-bible-app-server
>
> Example -
> https://github.com/ezra-bible-app/ezra-bible-app-server/blob/main/routes/module.js
>
> // Delivers the text of a chapter via the url
> /module/<moduleCode>/chaptertext/<bookCode>/<chapterNumber>
>
> router.get('/:moduleCode/chaptertext/:bookCode/:chapter', (req, res)
> => { const moduleCode = req.params.moduleCode;
> const bookCode = req.params.bookCode;
> const chapter = parseInt(req.params.chapter);
>
> const chapterText = nsi.getChapterText(moduleCode, bookCode,
> chapter); res.json(chapterText);
> });
>
> See here for example server deployed on some AWS machine I quickly
> set up. The following URL delivers the KJV text of John 5 as JSON.
> http://ec2-13-48-148-192.eu-north-1.compute.amazonaws.com/module/KJV/chaptertext/John/5
>
> Then I made some adjustments in the backend of Ezra Bible App,
> implementing a "switch" in a few methods that normally access a local
> node-sword-interface / SWORD installation.
>
> The respective example section in the Ezra Bible App backend looks
> like this:
> https://github.com/ezra-bible-app/ezra-bible-app/blob/web-api/app/backend/ipc/ipc_nsi_handler.js#L243
>
> this._ipcMain.add('nsi_getChapterText', async (moduleCode,
> bookCode, chapter) => {
> if (!this._useWebApi) {
> return this._nsi.getChapterText(moduleCode, bookCode,
> chapter); } else {
> return await
> this.getFromWebApi(`/module/${moduleCode}/chaptertext/${bookCode}/${chapter}`);
> }
> });
>
> Based on the switch useWebApi (currently just a constant) I can
> switch between the "local version" and the "remote version".
> The interface is compatible, because both the local version and the
> remote version pull data from node-sword-interface and that already
> returns JSON as of today.
>
> I ended up with a test version of Ezra Bible App that would load
> module lists and offer the regular browsing capabilities as the
> normal "offline" variant.
> The performance in the UI for regular Bible browsing is nearly the
> same.
>
> The use case that I see is to install a bunch of popular modules on
> the server side for different languages and offer these to the user
> based on quick "online access" right after installing the app.
>
> I am also interested how this behaves when the internet connection is
> slower. I'll report some findings once I have them. It should be easy
> to simulate that now based on the developer tools built into Electron.
>
> Right now this is an experiment. I'll explore a bit more and if this
> turns out useful, I may think about integrating this into Ezra.
>
> Best regards,
> Tobias
>
More information about the sword-devel
mailing list