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

    Fehler in openapi.json definition der privacyPolicyAgreement?

    ChurchTools Schnittstellen
    2
    7
    461
    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.
    • aschildA
      aschild
      last edited by

      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 Reply Last reply Reply Quote 1
      • aschildA
        aschild @aschild
        last edited by

        @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 Reply Last reply Reply Quote 1
        • davidschillingD
          davidschilling ChurchToolsMitarbeiter
          last edited by

          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 Reply Last reply Reply Quote 0
          • davidschillingD
            davidschilling ChurchToolsMitarbeiter @aschild
            last edited by 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 Reply Last reply Reply Quote 0
            • aschildA
              aschild @davidschilling
              last edited by

              @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 Reply Last reply Reply Quote 0
              • aschildA
                aschild @aschild
                last edited by

                @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 Reply Last reply Reply Quote 0
                • aschildA
                  aschild @davidschilling
                  last edited by

                  @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 Reply Last reply Reply Quote 0
                  • First post
                    Last post