[openstreetmap/openstreetmap-website] Implement JSON support for the changeset download API (PR #5973)

Kyℓe Hensel notifications at github.com
Thu May 1 10:48:56 UTC 2025


Closes #5970

### Description
Created a new endpoint `/changeset/:id/download.json` which returns the `osmChange` in a JSON format in addition to the existing XML endpoint.

For example:

```jsonc
{
  "version": "0.6",
  "generator": "OpenStreetMap server",
  "copyright": "OpenStreetMap and contributors",
  "attribution": "http://www.openstreetmap.org/copyright",
  "license": "http://opendatacommons.org/licenses/odbl/1-0/",
  "osmChange": {
    "create": [
      { "type": "node", "id": 7, "lat": -36.8359797, "lon": 174.7683977, "timestamp": "2025-05-01T09:00:52Z", "version": 1, "changeset": 2, "user": "kylenz_testing", "uid": 1 }
    ],
    "modify": [
      { "type": "way", "id": 2, "timestamp": "2025-05-01T09:00:52Z", "version": 2, "changeset": 2, "user": "kylenz_testing", "uid": 1, "nodes": [5, 6, 7, 5], "tags": { "landuse": "industrial" } }
    ],
    "delete": [
      { "type": "node", "id": 4, "timestamp": "2025-05-01T09:00:52Z", "version": 2, "changeset": 2, "user": "kylenz_testing", "uid": 1, "visible": false }
    ]
  }
}

```

**Important:** This proposed format is different to the format proposed in https://github.com/zerebubuth/openstreetmap-cgimap/pull/407 They key different is that we keep it simple like the current XML format, instead of adding a new `action` property to every node/way/relation. [Comparison](https://github.com/mmd-osm/openstreetmap-cgimap/blob/89abe65e5231959ae5ad4fa16aa479dd44d48505/test/test_apidb_backend_changeset_uploads.cpp#L2596-L2622)


In my opinion, this format is better because:
* it's consistent with the current XML format
* It doesn't use a top-level array. top-level arrays are annoying because they prevents other properties from being added in the future. Some apps already add custom properties to the XML file<sup>[[1]](https://forum.osm.org/t/108670)</sup>
* It's more organised and understandable since it doesn't add any new properties to the `Node`/`Way`/`Relation` objects/classes.

### How has this been tested?
- Tested locally with a fresh database, using changesets that create+modify+delete multiple nodes+ways+relations
- Unit tests


You can view, comment on, or merge this pull request online at:

  https://github.com/openstreetmap/openstreetmap-website/pull/5973

-- Commit Summary --

  * Implement JSON support for the changeset download API

-- File Changes --

    M app/controllers/api/changesets/downloads_controller.rb (1)
    A app/views/api/changesets/downloads/show.json.jbuilder (7)
    M test/controllers/api/changesets/downloads_controller_test.rb (86)

-- Patch Links --

https://github.com/openstreetmap/openstreetmap-website/pull/5973.patch
https://github.com/openstreetmap/openstreetmap-website/pull/5973.diff

-- 
Reply to this email directly or view it on GitHub:
https://github.com/openstreetmap/openstreetmap-website/pull/5973
You are receiving this because you are subscribed to this thread.

Message ID: <openstreetmap/openstreetmap-website/pull/5973 at github.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/rails-dev/attachments/20250501/ecc7cc94/attachment-0001.htm>


More information about the rails-dev mailing list