brandur / json_schema

A JSON Schema V4 and Hyperschema V4 parser and validator.
MIT License
230 stars 45 forks source link

$ref works with external files? #41

Closed maurogeorge closed 8 years ago

maurogeorge commented 8 years ago

Hi guys,

I think I found a issue, with a response:

{"name":1,"description":"Description 1"}

And passing the file

{
  "properties": {
    "name": {
      "$ref": "test/support/schemas/custom/show.json#/properties/name"
    },
    "description": {
      "$ref": "test/support/schemas/custom/show.json#/properties/description"
    }
  }
}
# test/support/schemas/custom/show.json

{
  "properties": {
    "name" : { "type" : "string" },
    "description" : { "type" : "string" }
  }
}

This is valid on json_schema, as you can see the name on response is a integer and in the schema is a string. If I change the schema to this:

{
  "properties": {
    "name" : { "type" : "string" },
    "description": {
      "$ref": "test/support/schemas/custom/show.json#/properties/description"
    }
  }
}

I got the expected error.

After some debug if I change the $ref to non existent files, it is still considered a valid response:

{
  "properties": {
    "name": {
      "$ref": "foo"
    },
    "description": {
      "$ref": "bar"
    }
  }
}

I only got a error RuntimeError: RuntimeError: #: "test/support/schemas/custom/show.json#/properties" is not a valid schema. when I change the schema to this:

{
  "properties": {
    "$ref": "test/support/schemas/custom/show.json#/properties"
  }
}

If I change the value to /test/support/schemas/custom/show.json#/properties, /custom/show.json#/properties or custom/show.json#/properties always I got the error, never is found the file.

Thanks for the working on the project.

brandur commented 8 years ago

Hey @maurogeorge, building this I kind of made a decision to not try to expand and resolve all references automatically given that you're allowed to use URIs and this kind of thing in them. The result is that this is a slightly more manual process than what may be optimal in some cases.

Can you check out https://github.com/brandur/json_schema/issues/22 and see if it helps your case at all?

maurogeorge commented 8 years ago

Thanks a lot @brandur with the content of #22 I can solve my problem.

Thanks :heart: