Upload vom einem Programm aus

Es wurde der Wunsch geäußert, dass man GEDCOM-Dateien auch von einem Programm aus in GEDBAS hochladen können soll. Das habe ich nun eingebaut.

curl -v -X POST https://gedbas.genealogy.net/database/saveWithApiKey \
  -H "Content-Type: multipart/form-data"  \
  -F "apiKey=APIKEY" \
  -F "file=@hamburg.ged" \
  -F "title=Hamburg" \
  -F "description=Meine Vorfahren aus Hamburg" 

Als Ergebnis bekommt man die Nummer der Datei bei GEDBAS, z.B. 12345. Mit Hilfe dieser Nummer kann man die Datei später aktualisieren:

curl -v -X POST https://gedbas.genealogy.net/database/saveWithApiKey \
  -H "Content-Type: multipart/form-data"  \
  -F "apiKey=APIKEY" \
  -F "id=12345" \
  -F "file=@hamburg-neu.ged" \
  -F "title=Hamburg" \
  -F "description=Meine Vorfahren aus Hamburg" 

Den persönlichen API-Schlüssel bekommt man auf der Seite https://gedbas.genealogy.net/user/apiKeys. Bisher gibt es nur einen einzigen pro Person. Das könnte man irgendwann mal auf weitere Schlüssel erweitern, so dass man Berechtigungen auch wieder entziehen kann.

Hier ist die OpenAPI-Beschreibung zu der Schnittstelle:

openapi: 3.0.3
info:
  title: GEDBAS Upload API
  description: API zum Hochladen und Speichern von GEDCOM-Dateien.
  version: 1.0.0
servers:
  - url: https://gedbas.genealogy.net

paths:
  /database/saveWithApiKey:
    post:
      summary: Datei speichern oder aktualisieren
      description: |
        Lädt eine GEDCOM-Datei mit zugehörigen Metadaten hoch.  
        - Wenn keine `id` übergeben wird, wird ein neuer Eintrag erstellt (Status **204**).  
        - Wenn eine `id` angegeben ist, wird der entsprechende Eintrag aktualisiert (Status **200**).
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                id:
                  type: integer
                  description: Optionale Nummer zum Aktualisieren einer bestehenden Datei
                apiKey:
                  type: string
                  description: API-Schlüssel zur Authentifizierung (kann unter https://gedbas.genealogy.net/user/apiKeys eingesehen werden)
                file:
                  type: string
                  format: binary
                  description: Die hochzuladende GEDCOM-Datei
                title:
                  type: string
                  description: Titel der Datei
                description:
                  type: string
                  description: Beschreibung der Datei
                downloadAllowed:
                  type: boolean
                  description: Gibt an, ob der Download erlaubt ist. Standardmäßig ist er nicht erlaubt.
              required:
                - apiKey
                - file
                - title
                - description
      responses:
        '200':
          description: Eintrag wurde erfolgreich aktualisiert
        '204':
          description: Neuer Eintrag wurde erfolgreich erstellt
        '400':
          description: Ungültige Anfrage oder fehlende Parameter
        '401':
          description: Fehlender oder ungültiger API-Schlüssel
        '403':
          description: Zugriff auf die Datei nicht erlaubt
        '500':
          description: Interner Serverfehler

  /database/myFiles:
    post:
      summary: Liste der eigenen Dateien bei GEDBAS einsehen
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                apiKey:
                  type: string
                  format: uuid
                  description: API-Schlüssel zur Authentifizierung (kann unter https://gedbas.genealogy.net/user/apiKeys eingesehen werden)
              required:
                - apiKey
      responses:
        '200':
          description: Erfolgreiche Antwort mit JSON-Array
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                    title:
                      type: string
                    description:
                      type: string
                    last_updated:
                      type: string
                      format: date-time
                    number_of_families:
                      type: integer
                    number_of_persons:
                      type: integer
                    views:
                      type: integer
                    status:
                      type: string
                      enum: [ONLINE, NEW, DELETED]

Nun habe ich auch noch eine Methode eingebaut, um die Liste der eigenen Dateien in GEDBAS abzurufen. Von der Kommandozeile aus geht es so:

curl -X POST https://gedbas.de/database/myFiles -H "Content-Type: 
multipart/form-data" -H "Accept: application/json" -F "apiKey=API_KEY"

Die OpenAPI-Dokumentation oben habe ich auch schon angepasst.

2 „Gefällt mir“