• Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen
    • Suche
    • Registrieren
    • Anmelden

    Fehler in openapi.json definition der privacyPolicyAgreement?

    ChurchTools Schnittstellen
    2
    7
    367
    Lade mehr Beiträge
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
    • aschildA
      aschild
      zuletzt editiert von

      Hallo Zusammen,
      wir sind gerade daran zum neuen REST Api eine PHP client library zu machen.
      Dazu machen wir erste Versuche mit https://github.com/janephp/janephp und die Clientklassen sehen gut aus und funktionieren auch grösstenteils.

      Was aber nicht funktioniert ist der Zugriff auf die Personen, und zwar stolpert es hier über das Feld "privacyPolicyAgreement".

      Gemäss openapi.json sollte das ein objekt sein, das API scheint mir hier aber ein (leeres) Array zurückzugeben.

      Hier die Definition:

      "privacyPolicyAgreement": {
        "type": "object",
        "properties": {
          "date": {
          "type": "string",
          "format": "date",
          "nullable": true
        },
        "typeId": {
          "type": "integer",
          "nullable": true
        },
        "whoId": {
          "type": "integer",
          "nullable": true
        }
      }
      },
      

      Was mir aber das Api beim aufruf zurückgibt:

      {
        "data": {
          "id": 6,
      Zeilen gelöscht wegen privacy
          "email": "meineemail",
          "cmsUserId": "xxxxxx",
          "privacyPolicyAgreement": [],
          "nationalityId": 150,
          "familyStatusId": 2,
      Zeilen gelöscht wegen privacy
        }
      }
      

      Da scheint ein Array zurückzukommen....

      Frage nun: Macht das Jane PHP Framework etwas falsch, weil es da ein Objekt erwartet, oder macht CT da etwas falsch (entweder die Definition oder die Antwort)?

      3.x kein Selfhosting mehr

      aschildA 1 Antwort Letzte Antwort Antworten Zitieren 1
      • aschildA
        aschild @aschild
        zuletzt editiert von

        @aschild Hier übrigens noch etwas was swagger am Schema zu beanstanden hat, wenn man das file in https://editor.swagger.io/ öffnet.

        Errors
        
        Structural error at paths./persons/{id}/servicerequests.get.parameters.0
        should NOT have additional properties
        additionalProperty: id
        Jump to line 2873
        

        Ich vermute mal, dass das Feld id nicht Optional sein kann, da es ja in der URL verwendet wird.....

        '/persons/{id}/servicerequests':
           get:
             summary: Get all service requests for a person
             description: Use this endpoint to get all service requests for this user.
             operationId: getOpenServiceRequestsForPerson
             tags:
               - Person
               - Service & Service Groups
             parameters:
               - id: null
                 name: id
                 in: path
                 description: ID of person
                 required: true
                 schema:
                   type: integer
                   example: 42
        

        3.x kein Selfhosting mehr

        davidschillingD 1 Antwort Letzte Antwort Antworten Zitieren 1
        • davidschillingD
          davidschilling ChurchToolsMitarbeiter
          zuletzt editiert von

          Wenn ich das richtig sehe ist das ein PHP Problem 🙂

          Also, normalerweise kommt da ein Objekt zurück, aber wenn das leer ist kommt ein Array zurück.

          Das liegt daran, dass in PHP Arrays auch als Maps verwendet werden.

          Beispiel:

          Map: ['foo' => 'bar']
          Array: ['bar']

          Wenn jetzt die Map oder das Array leer sind sehen beide so aus: []
          Das führt dazu, dass beim Konvertieren der Struktur ein Array bei einer leeren Map rauskommt.
          Ich hab das jetzt nicht überprüft, aber sieht mir stark nach dem Problem aus.

          aschildA 1 Antwort Letzte Antwort Antworten Zitieren 0
          • davidschillingD
            davidschilling ChurchToolsMitarbeiter @aschild
            zuletzt editiert von davidschilling

            @aschild Den Fehler zu den servicerequests hab ich in der Docu behoben und kommt dann mit der nächsten Version.

            Hier der git diff falls du es selber schon ausprobieren willst:

            Screenshot 2019-11-20 at 21.19.04.png

            aschildA 1 Antwort Letzte Antwort Antworten Zitieren 0
            • aschildA
              aschild @davidschilling
              zuletzt editiert von

              @davidschilling sagte in Fehler in openapi.json definition der privacyPolicyAgreement?:

              @aschild Den Fehler zu den servicerequests hab ich in der Docu behoben und kommt dann mit der nächsten Version.

              Hier der git diff falls du es selber schon ausprobieren willst:

              Screenshot 2019-11-20 at 21.19.04.png
              @davidschilling

              Die Sourcedatei habe ich auf dem Server nicht gefunden, aber kein Problem, da kann ich auf die nächste Version warten.

              3.x kein Selfhosting mehr

              aschildA 1 Antwort Letzte Antwort Antworten Zitieren 0
              • aschildA
                aschild @aschild
                zuletzt editiert von

                @davidschilling Ich habe nun mal im finalen openapi.json das entfernt und dann durch den Validator gejagt:

                http://online.swagger.io/validator/debug?url=https://tools.ref-nidau.ch/system/runtime/swagger/openapi.json

                0	"attribute components.schemas.PersonSetting.items is missing"
                1	"attribute paths.'/persons/{id}/settings'(get).responses.200.content.schema.items is missing"
                2	"attribute paths.'/persons/{id}/settings/{module}'(get).responses.200.content.schema.items is missing"
                3	"attribute paths.'/persons/{id}/settings/{module}/{attribute}'(get).responses.200.content.schema.items is missing"
                4	"attribute paths.'/persons/{id}/settings/{module}/{attribute}'(put).responses.200.content.schema.items is missing"
                

                Auch der hier stolpert an der gleichen Stelle
                https://openapi-generator.tech/

                Und mittels https://speccy.io/

                speccy lint openapi.json
                Specification schema is invalid.
                
                #/paths/~1persons~1{id}~1settings/get/responses/200/content/application~1json/oneOf/2
                expected Object { type: 'array' } to have property items
                
                #/paths/~1persons~1{id}~1settings/get/responses/200/content/application~1json
                expected Object {
                  summary: 'Get a specific campus',
                  tags: Array [ 'Campus' ],
                  parameters: Array [
                    Object {
                  ... snip ...
                } to have property operationId
                
                #/paths/~1persons~1{id}~1settings/get/responses/200/content
                expected Object {
                  summary: 'Update campus',
                  tags: Array [ 'Campus' ],
                  parameters: Array [
                    Object {
                  ... snip ...
                } to have property operationId
                
                #/paths/~1persons~1{id}~1settings/get/responses/200
                expected Object {
                  summary: 'Delete a campus',
                  tags: Array [ 'Campus' ],
                  parameters: Array [
                    Object {
                  ... snip ...
                } to have property operationId
                
                #/paths/~1persons~1{id}~1settings/get/responses
                expected Object {
                  summary: 'Get a specific status',
                  tags: Array [ 'Status' ],
                  parameters: Array [
                    Object {
                  ... snip ...
                } to have property operationId
                
                #/paths/~1persons~1{id}~1settings/get
                expected Object {
                  summary: 'Update status',
                  tags: Array [ 'Status' ],
                  parameters: Array [
                    Object {
                  ... snip ...
                } to have property operationId
                
                #/paths/~1persons~1{id}~1settings
                expected Object {
                  summary: 'Delete a status',
                  tags: Array [ 'Status' ],
                  parameters: Array [
                    Object {
                  ... snip ...
                } to have property operationId
                

                3.x kein Selfhosting mehr

                1 Antwort Letzte Antwort Antworten Zitieren 0
                • aschildA
                  aschild @davidschilling
                  zuletzt editiert von

                  @davidschilling sagte in Fehler in openapi.json definition der privacyPolicyAgreement?:

                  Wenn ich das richtig sehe ist das ein PHP Problem 🙂

                  Also, normalerweise kommt da ein Objekt zurück, aber wenn das leer ist kommt ein Array zurück.

                  Das liegt daran, dass in PHP Arrays auch als Maps verwendet werden.

                  Beispiel:

                  Map: ['foo' => 'bar']
                  Array: ['bar']

                  Wenn jetzt die Map oder das Array leer sind sehen beide so aus: []
                  Das führt dazu, dass beim Konvertieren der Struktur ein Array bei einer leeren Map rauskommt.
                  Ich hab das jetzt nicht überprüft, aber sieht mir stark nach dem Problem aus.

                  So wie ich das sehe, passend hier Definition und Rückgabewert nicht zusammen, wenn bei der Person keine privacyPolicyAgreement gespeichert ist.

                  Die Definition erwartet ein Objekt mit den 3 properties date/typeId/whoId, die zwar alle null sein dürfen, aber das objekt selbst sollte in der JSON Anwort daherkommen.

                  Wenn keine privacyPolicyAgreement vorhanden ist, dann sollte doch das Feld privacyPolicyAgreement als Nullable definiert sein und auch als null zurückgeliefert werden...

                  Wir als Schweizer dürfen dieses Feld glücklicherweise noch für 2-3 Jahre ignorieren, daher ist es bei uns noch Leer und führt zu diesem Stolpern...

                  3.x kein Selfhosting mehr

                  1 Antwort Letzte Antwort Antworten Zitieren 0
                  • Erster Beitrag
                    Letzter Beitrag