Как в Eve можно сделать подресурс коллекции и сохранить конечную точку родительской коллекции?

Мне нужны эти три конечные точки:

/games
/images
/games/<game_id>/images

Вот выдержка из моего файла settings.py

#...

games = {
    "schema": {
        "title": {
            "type": "string",
            "required": True
        },
        "name": {
            "type": "string",
            "required": True
        },
    }
}

images = {
    "schema": {
        "game_id": {
            "type": "string",
            "required": True,
        },
        "title": {
            "type": "string",
            "required": True,
        },
    },
    "url": "games/<regex('[a-f0-9]{24}'):game_id>/images"
}
#...

Если вы пропустите свойство url, вы получите две ожидаемые конечные точки при GET /:

/games

/images

Но если вы включите свойство url, вы не сможете нажать /images, а вместо этого сможете нажать только /games и /games/<game_id>/images, как показано здесь:

{
    "_links": {
        "child": [
            {
                "href": "/games/<regex('[a-f0-9]{24}'):game_id>/images",
                "title": "games/<regex('[a-f0-9]{24}'):game_id>/images"
            },
            {
                "href": "/games",
                "title": "games"
            }
        ]
    }
}

Как я могу сохранить коллекцию images и при этом сделать ее документы доступными через запрос подресурса?


person sam    schedule 02.10.2014    source источник


Ответы (1)


Вы можете настроить 3 разные конечные точки, тогда как две из них используют один и тот же ресурс базы данных (изображения). Что-то вроде этого:

images_schema: {
  "game_id": {
    "type": "string",
    "required": True,
  },
  "title": {
    "type": "string",
    "required": True,
  },
}

games = {
  "schema": {
    "title": {
      "type": "string",
      "required": True
    },
    "name": {
      "type": "string",
      "required": True
    },
  }
}

images = {
  "schema": images_schema,
  "url": "images"  # not really needed
}

games_images = {
  "schema": images_schema,
  "url": "games/<regex('[a-f0-9]{24}'):game_id>/images",
  "datasource": {"source": "images"}
}

Для справки см. несколько конечных точек API, один источник данных.

person Nicola Iarocci    schedule 03.10.2014
comment
Как тогда один POST к ресурсу изображений? - person frankV; 11.09.2015
comment
@frankV это совсем другой вопрос :) С curl вы можете сделать что-то вроде этого: $ curl -F "name=john" -F "[email protected]" http://example.com/accounts - person Nicola Iarocci; 12.09.2015