Swagger 3.0 schema error "should NOT have additional properties"

peter ivarsson picture peter ivarsson · Jan 16, 2018 · Viewed 7.1k times · Source

What does this error below mean? (Running in Swagger Editor)

Schema error should NOT have additional properties additionalProperty: /buildinfo, /clearcache, /countries/{countryId}/cinemas/{theatreid}/screens/{screenid}/layout, /countries/{countryId}/cinemas/{theatreid}/screens Jump to line 0

Below is my yaml file.

openapi: "3.0.1"
info:
  title: Mobile backend
  version: 1.0.0
  license:
    name: Apache 2.0
paths:
/buildinfo:
    get:
      description: Returns the build information (Version and Time stamp).
      operationId: getBuildInfo
      parameters:
        - name: LBPATH
          in: header
/clearcache:
    get:
      description: Clears the mobile backends cache (You need to be Admin to do this call)
      operationId: clearCache
      parameters:
        - name: LBPATH
          in: header
/countries/{countryId}/cinemas/{theatreid}/screens/{screenid}/layout:
    get:
      description: Returns a list of Auditoriums that is currently running in a specific city. Ordered by movie name in ascending order.
      operationId: getScreenLayout
      parameters:
        - name: theatreid
          in: path
        - name: screenid
          in: path
        - name: seatwidth
          in: query
        - name: seatheight
          in: query
        - name: Accept-Language
          in: header
        - name: LBPATH
          in: header
/countries/{countryId}/cinemas/{theatreid}/screens:
    get:
      description: Returns a list of Auditoriums that is currently running in a specific city. Ordered by movie name in ascending order.
      operationId: getAuditoriumsInTheatre
      parameters:
        - name: theatreid
          in: path
        - name: Accept-Language
          in: header
        - name: LBPATH
          in: header
components:
  schemas:
    ProfileNotifications:
      properties:
        iWantEmails:
          type: boolean
        iWantSMS:
          type: boolean
        iWantPushNotifications:
          type: boolean
    OfferActivateRequest:
      properties:
        offerId:
          type: int64
        osType:
          $ref: '#/components/schemas/OSType'
        mobileId:
          type: string
        activationDate:
          type: date
    Customer:
      properties:
        type:
          $ref: '#/components/schemas/TicketType'
        count:
          type: int32
    Profile$ProfileStatus:
      properties:
    Booking:
      properties:
        profileId:
          type: string
        remoteEntityIds:
          type: array
          items:
            string
        customers:
          type: array
          items:
            $ref: '#/components/schemas/Customer'
        showId:
          type: string
        seatsUnnumberedCount:
          type: int32
    ProfileFriend:
      properties:
        name:
          type: string
        profileReferenceCode:
          type: string
    OfferConsumeRequest:
      properties:
        offerId:
          type: int64
        osType:
          $ref: '#/components/schemas/OSType'
        mobileId:
          type: string
    Profile:
      properties:
        language:
          type: string
        children:
          type: array
          items:
            int32
        city:
          type: string
        memberSince:
          type: date
        status:
          $ref: '#/components/schemas/Profile$ProfileStatus'
        firstName:
          type: string
        lastName:
          type: string
        phonenumber:
          type: string
        socialSecurityNumber:
          type: string
        acceptedTermsAndConditionsOn:
          type: date
        acceptedGeneralDataProtectionRegulationOn:
          type: date
        profileId:
          type: string
        currentLevelId:
          type: string
        aztecCode:
          type: string
        allowSfBioToSendNewsletters:
          type: boolean
        favoriteMovies:
          type: array
          items:
            string
        spendingPointsWillExpire:
          type: array
          items:
            $ref: '#/components/schemas/SpendingPoint'
        friends:
          type: array
          items:
            $ref: '#/components/schemas/ProfileFriend'
        userEmail:
          type: string
        providerId:
          type: int32
        providerToken:
          type: string
        memberNumber:
          type: string
        userHasVerifiedThisAccount:
          type: boolean
        loyaltyLevelId:
          type: string
        loyaltyLevelName:
          type: string
        loyaltyLevelSince:
          type: date
        loyaltyLevelExpiration:
          type: date
        loyaltyPointsAvailableForSpending:
          type: int32
        loyaltyMoviesLeftToTheNextLevel:
          type: int32
        loyaltyPointsLeftToTheNextLevel:
          type: int32
        loyaltyPointsLevelToGetGoldMember:
          type: int32
        loyaltyMovieLevelToGetGoldMember:
          type: int32
        loyaltySpendingPointsExpireDate:
          type: date
        loyaltySpendingPointsExpireAmount:
          type: int32
        oldClubCardNumber:
          type: string
        loyaltyEndDate:
          type: date
    CardType$Type:
      properties:
        purchaseCard:
          type: boolean
    Card:
      properties:
        type:
          $ref: '#/components/schemas/CardType$Type'
        number:
          type: string
        requestedAmount:
          type: int32
        deductedAmount:
          type: int32
        isUsed:
          type: boolean
        balance:
          type: int32
        errorCode:
          type: int32
    LockSeats:
      properties:
        seatKeys:
          type: array
          items:
            $ref: '#/components/schemas/SeatKey'
        auditoriumSys99Code:
          type: string
        dateTime:
          type: int64
    SeatKey:
      properties:
        seatRow:
          type: int32
        seatSection:
          type: string
        seatId:
          type: int32
    ShowKey:
      properties:
    Payment:
      properties:
        email:
          type: string
        profileId:
          type: string
        serialVersionUID:
          type: int64
        ticketTypes:
          type: array
          items:
            $ref: '#/components/schemas/TicketType'
        easyPayment:
          $ref: '#/components/schemas/EasyPayment'
        reservationPayment:
          type: boolean
        reservationNumber:
          type: string
        cards:
          type: array
          items:
            $ref: '#/components/schemas/Card'
        showKey:
          $ref: '#/components/schemas/ShowKey'
        bookingId:
          type: int32
        redirectUrl:
          type: string
        transactionId:
          type: string
        customers:
          type: array
          items:
            $ref: '#/components/schemas/Customer'
        goggleCount:
          type: int32
        paymentResponseCode:
          type: string
    Reservation:
      properties:
        email:
          type: string
        profileId:
          type: string
        cards:
          type: array
          items:
            $ref: '#/components/schemas/Card'
        bookingId:
          type: int32
        customers:
          type: array
          items:
            $ref: '#/components/schemas/Customer'
        msisdn:
          type: string
        showId:
          type: string
        goggleCount:
          type: int32
        totalFee:
          type: int32
        adultTicketCount:
          type: int32
        childTicketCount:
          type: int32
        pensionerTicketCount:
          type: int32
        plusAndVipTicketCount:
          type: int32
        totalPlusAndVipTicketCost:
          type: int32
    SpendingPoint:
      properties:
        expireDate:
          type: date
        amount:
          type: int32
    ProfileMovies:
      properties:
        movies:
          type: array
          items:
            string
    OSType:
      properties:
    ProfileCinemas:
      properties:
        cinemas:
          type: array
          items:
            string
    LockSeatsUnnumbered:
      properties:
        auditoriumSys99Code:
          type: string
        dateTime:
          type: int64
        nrOfSeats:
          type: int32
    TicketType:
      properties:
    EasyPayment:
      properties:
        panHash:
          type: string
        truncPan:
          type: string
        userAccept:
          type: boolean

Answer

Helen picture Helen · Jan 16, 2018

The indentation of paths is wrong:

paths:
/buildinfo: # <-----
    get:

It should be:

paths:
  /buildinfo:
    get:

Your spec also has many other errors, such as missing schema for parameters, missing responses in operations, wrong type values in schemas, etc. Follow the hints in the Swagger Editor to fix the errors.


But I still get error I don't understand. "Schema error at paths" "should be array"

     parameters:
       name: LBPATH
       in: header
       schema:
         type: string
         style: simple

parameters is an array of parameters. In YAML, array items are formatted with the leading -. Also style is a parameter attribute, not schema attribute.

      parameters:
        - name: LBPATH
          in: header
          schema:
            type: string
          style: simple

To learn more about OpenAPI 3.0 syntax and how to format things, check out this guide: https://swagger.io/docs/specification/basic-structure/