Skip to content

[docs] Initial draft of the REST style guide - #1649

Draft
andrewnicols wants to merge 1 commit into
moodle:mainfrom
andrewnicols:restStyle
Draft

andrewnicols wants to merge 1 commit into
moodle:mainfrom
andrewnicols:restStyle

Conversation

@andrewnicols

@andrewnicols andrewnicols commented Jul 23, 2026 •

Copy link
Copy Markdown
Member

This is the initial draft of the REST style guide for RFC.

Copilot AI review requested due to automatic review settings July 23, 2026 06:01
@netlify

netlify Bot commented Jul 23, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for moodledevdocs ready!

Name Link
🔨 Latest commit 12653f6
🔍 Latest deploy log https://app.netlify.com/projects/moodledevdocs/deploys/6aabefe4152877000700873e
😎 Deploy Preview https://deploy-preview-1649--moodledevdocs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new REST documentation section to the Moodle DevDocs site, including an initial (but intended-to-be-normative) REST API style guide to standardize URI structure, naming, payload conventions, and HTTP semantics across Moodle components.

Changes:

  • Introduces a comprehensive REST API style guide covering resource design, URI conventions, JSON conventions, pagination, errors, and idempotency.
  • Adds a REST guide index page under docs/guides/rest/.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 10 comments.

File Description
docs/guides/rest/style.md Adds the initial REST style guide content and examples.
docs/guides/rest/index.md Adds the REST guides section index frontmatter (and should include navigational content).
Comments suppressed due to low confidence (2)

docs/guides/rest/style.md:998

  • This TODO note also uses broken Markdown emphasis ("-*TO DO:**"). Formatting it consistently will improve readability of the draft.
-*TO DO:** this section is under revision; most of it is being removed as incorrect, so its rationale will be drafted once the replacement content is agreed.

docs/guides/rest/index.md:7

  • docs/guides/rest/index.md currently contains only frontmatter, so the rendered page will be empty. Adding a short introduction and links (e.g. to the style guide) will make the section navigable.
---

Comment thread docs/guides/rest/style.md Outdated
Comment thread docs/guides/rest/style.md Outdated
Comment thread docs/guides/rest/style.md Outdated
Comment thread docs/guides/rest/style.md
Comment thread docs/guides/rest/style.md
Comment thread docs/guides/rest/style.md
Comment thread docs/guides/rest/style.md

#### RATIONALE

-*TO DO:** this rationale needs further work — the scope naming examples in this section are still under review and will be revised before this rationale is finalized.
Comment thread docs/guides/rest/style.md
Comment thread docs/guides/rest/style.md Outdated
Comment thread docs/guides/rest/style.md Outdated
Comment thread docs/guides/rest/style.md
| Canonical Patterns | reusable API patterns |
| Rationale | explanatory guidance |

Normative sections MUST use only:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we quote or reference RFC 2119 and 8174 here? I know, this is not an Internet Standard, but RFC 2119 was created for a reason, and IMHO it fits very well here, too.

Suggested change
Normative sections MUST use only:
Normative sections MUST use only the following key words, and they are to be interpreted as described in [BCP 14](https://datatracker.ietf.org/doc/html/bcp14) [[RFC2119](https://datatracker.ietf.org/doc/html/rfc2119)] [[RFC8174](https://datatracker.ietf.org/doc/html/rfc8174)] when, and only when, they appear in all capitals:

Comment thread docs/guides/rest/style.md Outdated
Comment thread docs/guides/rest/style.md
Comment thread docs/guides/rest/style.md
| PUT | Yes |
| DELETE | Yes |
| POST | No |
| PATCH | No guarantee |

@jtse jtse Jul 29, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor: Can we simplify PATCH just "No" instead of "No guarantee"?

Comment thread docs/guides/rest/style.md
| POST | No |
| PATCH | No guarantee |

Retryable POST operations SHOULD support:

@jtse jtse Jul 29, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thoughts about upgrading Idempotency-Key from SHOULD to MUST?

  1. This would make retry safety a first principle. See my other comment below.
  2. In general, fewer optionality reduces ambiguity and thus complexity.

Of course, the downside is slightly more client-side complexity. But in my opinion is well worth not having to deal with support calls about duplicate records due to retries.

Comment thread docs/guides/rest/style.md

#### RATIONALE

Clients on unreliable networks, particularly mobile, need to safely retry requests without accidentally creating duplicate resources; since POST is inherently non-idempotent, an explicit Idempotency-Key lets the server recognize and deduplicate a retried creation request as the same logical operation, rather than the client having to guess whether a prior request actually succeeded before retrying.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not just network unreliability but rather unreliability in general, which would include server overload, especially during the start of semester (leading to duplicate requests).

@jtse jtse left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for writing this! A general point: Consider having fewer SHOULDs, either upgrading them to MUST or removing them. SHOULD in specs tend to make things more complicated.

Comment thread docs/guides/rest/style.md
Rules:

- must represent clear hierarchical ownership
- must remain shallow (maximum recommended depth: 2)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 to shallow resources (especially with respect to the technical reasons you outlined below). Where would a common resource like student submissions for an activity (assignment) go? If it's nested under activities it would be a depth of 3.

On the other hand, that nesting also feels intuitive to me as a dev. Maybe one way to resolve this is the top level resource courses (and enrollment) don't change often especially later in the school year/semester, so it's highly cacheable.

Thoughts?

@jtse jtse left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking forward to seeing how this evolves and prototype implementations.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants