HarelM left a comment (openstreetmap/openstreetmap-website#3107)

+1 for swagger/openAPI generated docs instead of a wiki maintenance, see my 
comment here: https://github.com/openstreetmap/openstreetmap-website/pull/5943.

In general, now that OSM backend supports Oauth2 token, one can set this token 
in a swagger UI to send authenticated requests through this UI, which is also 
great for testing and a great developer experience.

I have an example of my site. which is written in C# and has the swagger UI 
generated from the code, as can be seen here:
https://israelhiking.osm.org.il/swagger/index.html
Since my site uses OSM as third party authentication you can use your OSM token 
there to get user data (If you are interested in trying it out).

I have very little experience with ruby, so I wouldn't know where to start in 
order to integrate it, but in general, you can start by only integrating it and 
not exposing it until you are happy with what it offers.
In C# you only add annotations to the functions of the controller, and some 
comments, and swashbuckle (probably the equivalent of rswag) generates the open 
API spec and the swagger UI straight from the code, no need to maintain 
anything beside code documentation, which lies next to the code itself, and is 
really easy to maintain.

But I don't know if this is easy for ruby...
According to chatGPT this is process (which I believe is at least 50% 
implemented already):

With **Rswag**, you document your API **by writing RSpec tests** that describe 
each endpoint's behavior, inputs, and outputs.

It's a clever setup because it:

✅ **Documents** your API (OpenAPI-compliant YAML/JSON)  
✅ **Tests** that your API behaves as expected  
✅ **Feeds** that documentation directly into Swagger UI

---

### 📌 Why this approach?

Instead of writing Swagger YAML manually (which can get messy and out of sync), 
you:

- Write a test for `GET /posts`
- Describe its parameters, responses, and schema
- Run the test, which generates the Swagger JSON
- View the result in Swagger UI

---

### 🧠 Example: Document + test `GET /users`

Let's say you have a `UsersController` with an index action. You can create a 
test like this:

```ruby
# spec/integration/users_spec.rb
require 'swagger_helper'

RSpec.describe 'Users API', type: :request do
  path '/users' do
    get 'Retrieves all users' do
      tags 'Users'
      produces 'application/json'

      response '200', 'users found' do
        schema type: :array, items: {
          type: :object,
          properties: {
            id: { type: :integer },
            name: { type: :string },
            email: { type: :string }
          },
          required: [ 'id', 'name', 'email' ]
        }

        run_test!
      end
    end
  end
end
```

That does **two things at once**:

- 🎯 Describes the endpoint to Swagger
- ✅ Validates that a 200 response is returned and matches the schema

---

So yeah—you're integrating Swagger by writing **RSpec tests that double as 
documentation**. It's a two-for-one deal: test coverage + interactive docs.

Want help writing one for a real route in your app? Just tell me which 
controller/action you'd like to document.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/openstreetmap/openstreetmap-website/issues/3107#issuecomment-2828915771
You are receiving this because you are subscribed to this thread.

Message ID: 
<openstreetmap/openstreetmap-website/issues/3107/2828915...@github.com>
_______________________________________________
rails-dev mailing list
rails-dev@openstreetmap.org
https://lists.openstreetmap.org/listinfo/rails-dev

Reply via email to