Ontwikkel API-documentatie met geavanceerde zoekfunctionaliteit in Swagger of Redoc
description
Met deze prompt kan de gebruiker een geavanceerde zoekfunctie integreren in hun API-documentatie, waardoor ontwikkelaars sneller en efficiënter relevante informatie kunnen vinden. Dit verbetert de gebruiksvriendelijkheid en verhoogt de adoptie van de API. Het is een unieke toevoeging die niet alleen de structuur verbetert, maar ook direct de productiviteit van ontwikkelaars verhoogt.
prompt
Help me een geavanceerde zoekfunctionaliteit toe te voegen aan mijn REST API-documentatie met behulp van <kies Swagger of Redoc>. API-naam: <voer de naam van mijn API in>. Beschrijf de belangrijkste zoekcriteria of filters die ik wil opnemen, zoals endpointnamen, param ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorstel voor het toevoegen van een geavanceerde zoekfunctionaliteit aan je REST API-documentatie voor de Klantenbeheer API, inclusief voorbeelden en implementatieadvies:
---
**Doel:**
Gebruikers (ontwikkelaars) kunnen snel en intuïtief zoeken naar relevante API-endpoints en foutcodes binnen de documentatie, gebaseerd op zoekcriteria zoals endpointnamen en foutcodes.
---
### 1. Zoekfunctionaliteit in Swagger (OpenAPI) specificatie
#### a. **Gebruik van `tags` en `description` voor categorisatie**
Organiseer endpoints met duidelijke tags en beschrijvingen zodat zoekopdrachten gericht kunnen zijn.
#### b. **Implementatie van een zoek- of filterendpoint (voor interne documentatie)**
Voor een meer geavanceerde zoekfunctie binnen de API zelf, kun je bijvoorbeeld een speciale endpoint toevoegen:
```yaml
paths:
/zoek:
get:
summary: "Zoek API-endpoints en foutcodes"
description: "Zoekt op endpointnamen en foutcodes om relevante API-informatie te vinden."
parameters:
- name: zoekterm
in: query
description: "De zoekterm voor endpointnamen of foutcodes."
required: false
schema:
type: string
- name: filter
in: query
description: "Type filter: 'endpoint' of 'foutcode'."
required: false
schema:
type: string
enum: [endpoint, foutcode]
responses:
'200':
description: "Gevonden resultaten"
content:
application/json:
schema:
type: object
properties:
resultaten:
type: array
items:
oneOf:
- $ref: '#/components/schemas/EndpointInfo'
- $ref: '#/components/schemas/FoutcodeInfo'
```
**Voorbeeld respons:**
```json
{
"resultaten": [
{
"type": "endpoint",
"naam": "/klanten",
"beschrijving": "Beheer van klanteninformatie."
},
{
"type": "foutcode",
"code": "404",
"beschrijving": "Niet gevonden."
}
]
}
```
---
### 2. Voorstellen voor gebruikerservaring en documentatie
- **Frontend-zoekbalk**: Integreer een zoekbalk op de documentatiesite die zoekt op endpointnamen en foutcodes.
- **Filters**: Voeg filters toe zodat gebruikers kunnen kiezen tussen zoeken naar 'Endpoints' of 'Foutcodes'.
- **Autocomplete / suggesties**: Implementeer autocomplete voor zoektermen om snel relevante resultaten te bieden.
---
### 3. Voorbeeld van zoekcriteria en gebruik
**Zoeken op endpointnaam:**
- Query: `/zoek?zoekterm=klant&filter=endpoint`
**Zoeken op foutcode:**
- Query: `/zoek?zoekterm=404&filter=foutcode`
---
### 4. Tips voor implementatie
- **Gebruik tags en beschrijvingen** in je OpenAPI-specificatie om endpoints goed te categoriseren.
- **Implementeer een zoekindex** (bijvoorbeeld in Elasticsearch of een eenvoudige in-memory index) om snel resultaten te kunnen bieden.
- **Maak een gebruikersvriendelijke interface** voor de API-documentatie, bijvoorbeeld met Swagger UI of een aangepaste zoekpagina.
---
**Kort samengevat:**
Voeg een speciale zoekendpoint toe met queryparameters voor zoekterm en filtertype, en zorg dat je documentatie en UI gebruikers snel en intuïtief laten zoeken op endpointnamen en foutcodes. Hiermee verbeter je de bruikbaarheid en efficiëntie van je API-documentatie aanzienlijk.
---
Heeft u verdere specificaties of wensen?
provider: deepseek
model: deepseek-chat
Hier is een uitgebreid voorstel voor het implementeren van een geavanceerde zoekfunctionaliteit in je Swagger documentatie voor de Klantenbeheer API:
## Belangrijkste Zoekcriteria & Filters
### 1. **Endpointnamen**
- `GET /klanten` - Lijst van klanten ophalen
- `GET /klanten/{id}` - Specifieke klant ophalen
- `POST /klanten` - Nieuwe klant aanmaken
- `PUT /klanten/{id}` - Klantgegevens bijwerken
- `DELETE /klanten/{id}` - Klant verwijderen
- `GET /klanten/{id}/bestellingen` - Bestellingen van klant
### 2. **Foutcodes**
- `400` - Bad Request (Ongeldige invoer)
- `401` - Unauthorized (Niet geautoriseerd)
- `403` - Forbidden (Toegang geweigerd)
- `404` - Not Found (Klant niet gevonden)
- `409` - Conflict (Dubbele klant)
- `422` - Unprocessable Entity (Validatiefout)
- `500` - Internal Server Error
## Implementatie Voorstel
### Swagger UI Configuratie
```yaml
swagger: "2.0"
info:
title: "Klantenbeheer API"
description: |
# Geavanceerde Zoekfunctionaliteit
**Zoek in:**
- 📍 Endpointnamen (bijv: `GET /klanten`)
- ⚠️ Foutcodes (bijv: `404`, `400`)
- 📋 Parameters (bijv: `email`, `naam`)
*Voorbeeld: zoek naar "404" of "GET /klanten"*
version: "1.0.0"
```
### JavaScript Zoekimplementatie
```javascript
// Custom search functionality voor Swagger UI
const advancedSearch = {
init() {
this.addSearchBox();
this.bindEvents();
},
addSearchBox() {
const searchHTML = `
<div class="custom-search-container">
<input type="text" id="advancedSearch"
placeholder="Zoek op endpoint, foutcode of parameter...">
<button id="searchBtn">Zoeken</button>
<div class="search-filters">
<label><input type="checkbox" name="searchType" value="endpoints" checked> Endpoints</label>
<label><input type="checkbox" name="searchType" value="errors" checked> Foutcodes</label>
<label><input type="checkbox" name="searchType" value="parameters" checked> Parameters</label>
</div>
</div>
`;
document.querySelector('.swagger-ui .information-container').insertAdjacentHTML('afterend', searchHTML);
},
bindEvents() {
const searchInput = document.getElementById('advancedSearch');
const searchBtn = document.getElementById('searchBtn');
searchInput.addEventListener('input', (e) => this.performSearch(e.target.value));
searchBtn.addEventListener('click', () => this.performSearch(searchInput.value));
},
performSearch(query) {
if (!query.trim()) {
this.resetSearch();
return;
}
const searchTypes = this.getSelectedFilters();
this.highlightResults(query, searchTypes);
this.filterEndpoints(query, searchTypes);
},
getSelectedFilters() {
const checkboxes = document.querySelectorAll('input[name="searchType"]:checked');
return Array.from(checkboxes).map(cb => cb.value);
},
highlightResults(query, types) {
// Highlight logica voor verschillende zoektypes
const endpoints = document.querySelectorAll('.opblock-tag, .opblock-summary-path');
const responses = document.querySelectorAll('.response-col_status');
endpoints.forEach(el => {
if (types.includes('endpoints') && el.textContent.toLowerCase().includes(query.toLowerCase())) {
el.style.backgroundColor = '#e6f7ff';
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
responses.forEach(el => {
if (types.includes('errors') && el.textContent.includes(query)) {
el.style.backgroundColor = '#fff2e8';
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
},
filterEndpoints(query, types) {
const endpoints = document.querySelectorAll('.opblock');
endpoints.forEach(endpoint => {
const endpointText = endpoint.textContent.toLowerCase();
const shouldShow = this.matchesSearch(query.toLowerCase(), endpointText, types);
endpoint.style.display = shouldShow ? 'block' : 'none';
});
},
matchesSearch(query, text, types) {
if (types.includes('endpoints') && text.includes(query)) return true;
if (types.includes('errors') && this.hasErrorCode(text, query)) return true;
if (types.includes('parameters') && this.hasParameter(text, query)) return true;
return false;
},
hasErrorCode(text, query) {
const errorPatterns = ['400', '401', '403', '404', '409', '422', '500'];
return errorPatterns.some(code => code.includes(query) && text.includes(code));
},
hasParameter(text, query) {
const parameters = ['email', 'naam', 'telefoon', 'adres', 'postcode'];
return parameters.some(param => param.includes(query) && text.includes(param));
},
resetSearch() {
document.querySelectorAll('.opblock').forEach(el => {
el.style.display = 'block';
el.style.backgroundColor = '';
});
}
};
// Initialiseer wanneer Swagger UI geladen is
window.onload = () => advancedSearch.init();
```
### CSS Styling
```css
.custom-search-container {
background: #f8f9fa;
padding: 20px;
border-bottom: 1px solid #e0e0e0;
margin-bottom: 20px;
}
#advancedSearch {
width: 300px;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
margin-right: 10px;
}
#searchBtn {
padding: 10px 20px;
background: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.search-filters {
margin-top: 10px;
}
.search-filters label {
margin-right: 15px;
cursor: pointer;
}
```
## Gebruiksvoorbeelden
### Zoeken op Endpoint:
- **Invoer:** `GET /klanten`
- **Resultaat:** Highlight alle GET endpoints voor klantenbeheer
### Zoeken op Foutcode:
- **Invoer:** `404`
- **Resultaat:** Toont alle endpoints waar 404 fouten kunnen voorkomen
### Zoeken op Parameter:
- **Invoer:** `email`
- **Resultaat:** Highlight alle endpoints en parameters gerelateerd aan email
## Aanvullende Features
1. **Sneltoetsen:** `Ctrl+K` voor snel zoeken
2. **Zoekgeschiedenis:** Bewaar recente zoekopdrachten
3. **Suggesties:** Auto-complete voor endpointnamen
4. **Regex ondersteuning:** Geavanceerde patroonherkenning
Deze implementatie zorgt voor een intuïtieve en snelle zoekervaring, waardoor ontwikkelaars efficiënt de gewenste informatie kunnen vinden in je Klantenbeheer API documentatie.