I am a bit confused by the topic.
REAPER has 2 network based surface extensions with it:
* OSC. It works throw IP/UDP/OSC, the extension has build-in OSC server.
* Web (browser interface). It works throw IP/TCP/HTTP, the extension has build-in web server.
In addition to own format, Web extension can send text encoded OSC like message, so it will be processed using OSC pattern file. That is the only place where "Web" and "OSC" somehow meet each other (I guess Web just use pattern processor from OSC extension).
The folder for Web related files can be opened from Web extension configuration dialog (2 buttons).
The "protocol" is documented inside main.js and extremely simple:
* requests are HTTP GET with command encoded into URL, f.e:
http://localhost:8080/_/40667
executes Action "40667", which is "Stop (save all recorded media)".
* replies are text with requested information
main.js also defines user friendly wrappers to send requests and parse replies.
------------
How good the interface is depends from the web browser side programming. As with any web based interfaces, advanced skills in HTML/CSS/JS/AJAX are required to write a good one.
So it is simple to use already defined interfaces/mods or third party helpers like ReaperWRB (
https://reaperblog.net/course/reaperwrb/), but defining own is a challenge. In complexity, that is more like writing own VSTs or REAPER extensions vs defining own macro actions.