RESTBase/An-tsong
Hā-tsài RESTbase guân-tāi-bé
You can do this operation from any folder where you have permissions.
Uì git hā-tsài:
git clone https://github.com/wikimedia/restbase.git
Alternatively, download the zip from the project repository and extract it.
Install node dependencies
RESTBase has been tested with node.js version 10.
From the restbase project directory, install the Node dependencies using npm (part of nodejs):
npm install
npm install restbase
but in this case, you should set the environment variable APP_BASE_PATH
to YOUR_INSTALLATION_FOLDER/node_modules/restbase
before run the server and be careful with slightly different file positions including server.js
described below.
Phuè-tī
Hok-tsè sī-lē phuè-tī
cp config.example.yaml config.yaml
Teh tsia-ê pōo-hūn pian-tsip config.yaml ê bûn-kiānn:
x-sub-request-filters:
allow:
- pattern: http://localhost/w/api.php
forward_headers: true
- pattern: http://localhost:8142
forward_headers: true
- pattern: /^https?:\/\//
- You don't need to change anything nor worry about this section unless you run a private wiki (see question).
paths:
/{domain:YOUR_WIKI_WEBSITE}:
YOUR_WIKI_WEBSITE
is the base domain of your wiki (or identifier if you have several wikis at different paths of the same domain). For example, MediaWiki's base URL iswww.mediawiki.org
. It's used as an identifier path in case you use the same server for multiple wikis. For use with Parsoid in MediaWiki 1.35+, the domain must match exactly the host portion of your wiki's$wgServer
configuration.
action:
# XXX Check API URL!
apiUriTemplate: http://YOUR_WIKI_API_ENDPOINT
baseUriTemplate: "{{'http://127.0.0.1:7231/{domain}/v1'}}"
YOUR_WIKI_API_ENDPOINT
is the location of your wiki'sapi.php
. For example, MediaWiki's API endpoint is mediawiki.org/w/api.php. Tsham-ua̍t Tuan-tiámbaseUriTemplate
is the endpoint as it can be accessed from the Internet. If you proxy the traffic directly from apache/nginx to this service, you may use a URL like"{{'http://{domain}/api/rest_v1'}}"
. This is recommended, to avoid problems for people that can't access non-standard ports.
/parsoid:
x-modules:
- path: sys/parsoid.js
options:
# XXX Check Parsoid URL! .../rest.php is the default configuration
# Parsoid/JS used http://localhost:8142
parsoidHost: http://YOUR_WIKI_REST_ENDPOINT
- For MediaWiki 1.35 and later,
YOUR_WIKI_REST_ENDPOINT
is the location of your wiki'srest.php
. For example, MediaWiki's REST endpoint is mediawiki.org/w/rest.php. Tsham-ua̍t REST API . - In MediaWiki 1.34 and earlier, using Parsoid/JS , the
parsoidHost:
entry must correspond to the URL and port of your Parsoid server. If your Parsoid and RESTBase servers are on the same machine, thenlocalhost
is a valid URL, but you will typically need to add the appropriate port number. Parsoid/JS sú-iōnghttp://localhost:8142
tsiânn-tsò i-ê bi̍k-jīm-tī.
table:
storage_groups:
- name: default
domains: /./
backend: sqlite
dbname: db.sqlite3
- dbname: RESTBase will use by default a sqlite database for storing cached data. The file in the example script is named db.sqlite3 and is located in the same directory of the RESTBase folder. If you later want to run RESTBase as a service, you'll want to put the database on a different folder where the user running the service would have write permissions. For this you can change the line to:
dbname: /var/lib/restbase/db.sqlite3
(and ensuring the user account running the service has permissions to write on it). Please note: You must manually addstorage_groups
parameter since they introduced storage groups for SQLite (see T225579).
- In MediaWiki 1.35 and later you need to call Parsoid via your
LocalSettings.php
file in case the VisualEditor is not installed for the wiki:
wfLoadExtension(
'Parsoid',
'vendor/wikimedia/parsoid/extension.json' // Add absolute path here in case of issues with your job queue
);
If you want to serve requests from multiple wikis on the same RESTBase server, you should copy and replicate the entire /{domain:YOUR_WIKI_WEBSITE}:
section, changing configurations as needed.
Ūn-hîng sī-ho̍k-khì hām tshik-tshì
To test that it runs, from the RESTBase folder run:
node server.js
For testing, while it's running, on another terminal execute:
curl http://YOUR_RESTBASE_SERVER:7231/YOUR_WIKI_WEBSITE/v1/page/html/Main_Page
If everything is configured appropriately, you should see the HTML content of the Main_Page.
In a browser you can also test by navigating to http://YOUR_RESTBASE_SERVER:7231/YOUR_WIKI_WEBSITE/v1/
and you should see a page titled Wikimedia REST API.
On this page you can test all manner of RESTBase methods and variables.
Kî-thann ê tshik-tshì tshiánn tsham-khó GitHub.
Lû-kó Restbase ê tuann-kháu hông that-tiâu
If you do not see the page (your browser says it can't connect), your restbase server port may be blocked. Tshiánn tsip-hîng hā-liat tshau-tsok:
curl http://YOUR_RESTBASE_SERVER:7231/YOUR_WIKI_WEBSITE/v1/
- If you get
{"items":["page","transform"]}
, your restbase server port is ok. - Lû-kó lí nā-bô tit-tio̍h
{"items":["page","transform"]}
, tshiánn tsip-hîng hā-liat ê tshau-tsok:curl http://localhost:7231/YOUR_WIKI_WEBSITE/v1/
- If you get
{"items":["page","transform"]}
the restbase server is not bad, but you cannot access the port.
- If you get
To bypass the block, you can set proxypass to your Apache httpd configuration. See the Proxy requests to RESTBase from your webserver section for instructions.
Starting RESTBase Server automatically
Create a new user for the RESTBase service (optional, but recommended to avoid running it as root) and create a home folder for that user:
sudo useradd --home=/var/lib/restbase -M --user-group --system --shell=/usr/sbin/nologin -c "RESTBase for MediaWiki" restbase
sudo mkdir -p /var/lib/restbase
sudo chown restbase:restbase /var/lib/restbase
For installing the RESTBase server as a service with systemd, run sudo systemctl edit --force --full restbase.service
. It will open a text editor. Fill it with the following contents:
[Unit]
Description=Mediawiki RESTBase Service
Documentation=https://www.mediawiki.org/wiki/Special:MyLanguage/RESTBase
Wants=local-fs.target network.target
After=local-fs.target network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
User=restbase
Group=restbase
WorkingDirectory=/path_to_restbase-master
ExecStart=/usr/bin/node /path_to_restbase-master/server.js
KillMode=process
Restart=on-success
PrivateTmp=true
StandardOutput=syslog
Replace path_to_restbase-master
with the path to your restbase project directory.
To automatically start the RESTBase server at system startup,
systemctl enable restbase.service
Khòng-tsè RESTBase sī-ho̍k-khí,
sudo systemctl start|stop|restart|status restbase.service
Uì lí-ê bāng-lōo ho̍k-bū-khì kàu RESTBase ê tāi-lí iau-kiû
RESTBase must be accessible from the visitors of your site for some functions to work properly. Having RESTBase on a non-standard http port is problematic for some users behind a corporate proxy or firewall. To solve this, and specially to serve requests to RESTBase through HTTPS, you should set up a reverse-proxy on your webserver that would route requests at a given path of your wiki to the RESTBase server.
Apache
If you use apache, you can make a restbase.conf
file like this, and put on /etc/httpd/conf.d
of YOUR_RESTBASE_SERVER
.
# Restbase.conf : usually on /etc/httpd/conf.d/
<VirtualHost *:80>
AllowEncodedSlashes NoDecode
ProxyPreserveHost On
ProxyPass /YOUR_WIKI_WEBSITE/ http://localhost:7231/YOUR_WIKI_WEBSITE/ nocanon
ProxyPassReverse /YOUR_WIKI_WEBSITE/ http://localhost:7231/YOUR_WIKI_WEBSITE/
# Alternate configuration like WMF to have URLS like //example.com/api/rest_v1/
# ProxyPass /api/rest_v1/ http://localhost:7231/YOUR_WIKI_WEBSITE/v1/ nocanon
# ProxyPassReverse /api/rest_v1/ http://localhost:7231/YOUR_WIKI_WEBSITE/v1/
# MediaWiki is located here:
DocumentRoot /var/www/html
</VirtualHost>
Nginx
Teh it-puann ê phuè-tī:
upstream restbase {
server localhost:7231;
keepalive 32;
}
# Hack so nginx doesn't decode the / character in page titles, causing
# errors on pages with that title. https://stackoverflow.com/a/20514632
map $request_uri $restbasequery {
default "xx";
"~/YOUR_WIKI_WEBSITE/v1/(?<xrestbasequery>.*)$" "$xrestbasequery";
# Alternate configuration like WMF to have URLS like //example.com/api/rest_v1/
#"~/api/rest_v1/(?<xrestbasequery>.*)$" "$xrestbasequery";
}
Teh server
khu-tè:
location /YOUR_WIKI_WEBSITE/v1/ {
# Alternate configuration like WMF to have URLS like //example.com/api/rest_v1/
# location /api/rest_v1/ {
proxy_pass http://restbase/YOUR_WIKI_WEBSITE/v1/$restbasequery;
}
Configuring config.yaml for WMF like URLS
If you don't want to get a fetch error when using WMF like URLS, you should add x-host-basePath
to the spec
module like so:
paths:
/{domain:YOUR_WIKI_WEBSITE}/{api:v1}:
x-modules:
- spec:
info:
version: 1.0.0
title: Wikimedia REST API
description: Welcome to your RESTBase API.
x-route-filters:
- path: ./lib/normalize_title_filter.js
options:
redirect_cache_control: 's-maxage=0, max-age=86400'
x-host-basePath: /api/rest_v1
Tshik-tshì
You should restart httpd (by apachectl restart
or some means).
In a browser you can now navigate to:
http://YOUR_WIKI_WEBSITE/YOUR_WIKI_WEBSITE/v1/
(alternate url like WMF setup):
http://YOUR_WIKI_WEBSITE/api/rest_v1/
and you should see a page titled Wikimedia REST API.
And in this setting, you should add below to LocalSettings.php
for VisualEditor.
$wgVisualEditorRestbaseURL = "http://YOUR_WIKI_WEBSITE/YOUR_WIKI_WEBSITE/v1/page/html/";
$wgVisualEditorFullRestbaseURL = "http://YOUR_WIKI_WEBSITE/YOUR_WIKI_WEBSITE/";
# Alternate URL scheme
# $wgVisualEditorRestbaseURL = "http://YOUR_WIKI_WEBSITE/api/rest_v1/page/html/";
# $wgVisualEditorFullRestbaseURL = "http://YOUR_WIKI_WEBSITE/api/rest_";