Jump to content

OpenJournal:API: Difference between revisions

From openjournal
API documentation
 
No edit summary
Line 1: Line 1:
openjournal is MediaWiki, so it has MediaWiki's APIs — nothing here is bespoke, and
openjournal uses MediaWiki as a backend for all of its content. Anything that is possible on the [https://www.mediawiki.org/wiki/API:Main_page MediaWiki API] is possible here too.
anything true of the [https://www.mediawiki.org/wiki/API:Main_page MediaWiki API] is
true here.


Cross-origin reads are allowed, so you can call these straight from a browser — but
MediaWiki only sends the CORS headers when you ask for them, so add
'''<code>&origin=*</code>''' to any <code>api.php</code> request you make from
another site. <code>rest.php</code> needs no such parameter.


Articles are subpages of their author: '''<code>User:Alice/Some title</code>'''. That
== REST API ==
means "everything Alice wrote" is a title-prefix query.


== The friendly routes ==
For convenience, OpenJournal abstracts some of the MediaWiki URLs into a more modern RESTful format.


For the common case -- get someone's posts, get one post -- these read better than
You can see some examples below:
the MediaWiki API underneath them, which is all they are: Apache rewrite rules onto
the exact same <code>api.php</code> and <code>action=render</code> this page
documents further down, not a second API to keep in sync.


<pre>
<pre>
Line 28: Line 18:
<code>/users/Alice/posts/Laying_a_hedge</code> for
<code>/users/Alice/posts/Laying_a_hedge</code> for
<code>User:Alice/Laying a hedge</code>.
<code>User:Alice/Laying a hedge</code>.
A post that doesn't exist behaves differently depending on the format: with
<code>?format=html</code> you get a real <code>404</code>. Without it -- the default,
plain JSON -- you always get <code>200</code>, with <code>"missing":true</code> in the
body instead. That form is calling <code>api.php</code> underneath, and there is no
way to make MediaWiki's own API answer with a different HTTP status without writing
code, which
this project avoids. Check <code>missing</code> if that matters to you.


== All articles by one user (the underlying MediaWiki call) ==
== All articles by one user (the underlying MediaWiki call) ==
Line 80: Line 62:


== Writing from your own code ==
== Writing from your own code ==
Editing over the API uses the same login you use in the browser, which is Wikimedia
OAuth — so a script writes by acting as you through an
[https://meta.wikimedia.org/wiki/Special:OAuthConsumerRegistration owner-only OAuth
consumer], not by sending a password. Bot passwords are switched off here for the
same reason.


See [[OpenJournal:API/Recipes]] for worked examples, or the full parameter reference
See [[OpenJournal:API/Recipes]] for worked examples, or the full parameter reference
at [[Special:ApiHelp/query]] — it is generated from this wiki's own installed modules,
at [[Special:ApiHelp/query]] — it is generated from this wiki's own installed modules,
so it is never out of date.
so it is never out of date.

Revision as of 08:46, 11 September 2026

openjournal uses MediaWiki as a backend for all of its content. Anything that is possible on the MediaWiki API is possible here too.


REST API

For convenience, OpenJournal abstracts some of the MediaWiki URLs into a more modern RESTful format.

You can see some examples below:

GET /users/{username}/posts                     all of a user's posts, alphabetical by title
GET /users/{username}/posts/{title}              one post: title, wikitext, last-edited time
GET /users/{username}/posts/{title}?format=html  the same post, rendered to HTML
GET /users/{username}                            redirects to their journal (browsable)

{title} is the part after the slash, with spaces as underscores, e.g. /users/Alice/posts/Laying_a_hedge for User:Alice/Laying a hedge.

All articles by one user (the underlying MediaWiki call)

Same data the /users/{username}/posts route above returns, and where its extra parameters -- excerpts, URLs -- come from, if you want to add your own.

GET /api.php?action=query&list=allpages&apnamespace=2&apprefix=Alice/&format=json

One article, as HTML

GET /rest.php/v1/page/User%3AAlice%2FSome_title/html

One article, as source

GET /rest.php/v1/page/User%3AAlice%2FSome_title

Every article on the site, newest first

GET /api.php?action=query&generator=recentchanges&grcnamespace=2&grclimit=30&format=json

Excerpts and lead images, for a card or a feed

GET /api.php?action=query&prop=extracts|pageimages&exchars=300&explaintext=1&titles=User:Alice/Some_title&format=json

An Atom feed of everything

GET /index.php?title=Special:RecentChanges&feed=atom&namespace=2

One author's feed is the same URL narrowed with &tagfilter= or, more simply, poll list=allpages above.

Writing from your own code

See OpenJournal:API/Recipes for worked examples, or the full parameter reference at Special:ApiHelp/query — it is generated from this wiki's own installed modules, so it is never out of date.