• Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Unsolved Openjson Fehler: person/masterdata

    ChurchTools Schnittstellen
    2
    3
    207
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • skipyS
      skipy
      last edited by skipy

      Das Schema hat sich in Openapi 3.0 gegenüber Openapi 2.0 geändet. Das hier verwendete Format führt zu keinem Fehlern bei der Generierung, aber bei der Verwendung der API.
      Seit der Version 3.0 muss enum innerhalb von schemaverwendet werden.

      Konkret geht es um die contactLabels in der API-Schnittstelle person/masterdata. Und darin um das property ìsDefault. Laut derzeitiger openapi.json Beschreibung sieht es so aus:

      "isDefault": {
         "type": "boolean",
         "enum": [
              "true",
              "false"
            ],
         "example": "false",
         "description": "Indicator if label is the default. Used for new person emails"
                                    }
      

      Es sollte aber geändert werden in:

      "isDefault": {
         "schema": {
            "type": "boolean",
            "enum": [
               true,
               false
            ]
         },
         "example": "false",
         "description": "Indicator if label is the default. Used for new person emails"
      }
      

      Die "alte Definition" führt dazu, dass bei der Evaluierung der Ergebnisse in der API als Antwortwerte lediglich zwei Strings erlaubt sind (mit den Werten "true" oder "false", als String). Boolsche Werte werden im Ergebnis als fehlerhaft gewertet und es wird eine Exception geworfen.

      Siehe auch https://swagger.io/docs/specification/data-models/enums/

      Oder noch besser:

      Nach meinem Verständnis bräuchte es in der Openapi.json bei boolean Werte gar kein enum. Per Definition können Werte vom type boolean nämlich nur true oder false sein.
      So steht es jedenfalls hier: https://swagger.io/docs/specification/data-models/data-types/#boolean

      Hinweis:

      Die Änderung muss auch an allen andereren Stellen gemacht werden, wo in der Openapi ContactLabels zum Einsatz kommen. Außerdem habe ich ähnliche Definitionen noch an anderen Stellen gefunden, wie z.B. bei

      • /songs >> arrangemens >> isDefault
      • /songs/{songId} >> Song >> shouldPractice
      • ...
      skipyS B 2 Replies Last reply Reply Quote 1
      • skipyS
        skipy @skipy
        last edited by

        Ich finde diese Seite sehr hilfreich um den Unterschieden zwischen der Spezifikation in 2.0 und 3.0 grafisch nachzugehen:
        https://openapi-map.apihandyman.io

        1 Reply Last reply Reply Quote 0
        • B
          bwl21 @skipy
          last edited by bwl21

          @skipy sagte in Openjson Fehler: person/masterdata:

          Oder noch besser:
          Nach meinem Verständnis bräuchte es in der Openapi.json bei boolean Werte gar kein enum. Per Definition können Werte vom type boolean nämlich nur true oder false sein.

          Du steigst da gut und tief ein. Vielen Dank. Es sind oft diese Kleinigkeiten, die einem das Leben schwer machen. Ähnliche Probleme gibt es manchmal mit IDs, die mal als Integer und mal als String zurückkommen.

          Apropos Bool: Ich persönlich würde ja empfehlen auf bool ganz zu verzichten. Irgendwann kommt mal ein Fall hinzu wo man nicht mehr nur zweiwertig unterwegs ist. In der Regel braucht noch noch einen Neutralwert wenn man da nicht null nehmen will. Daher fände ich das mit den enum schon besser (und zukunftssicherer)

          1 Reply Last reply Reply Quote 0
          • First post
            Last post