2

python-eveを使用して API を構築しています。

私のデザインは単純なもので、ユーザーとデバイスの 2 つのリソースがあります。

  • /ユーザー[/ID]
  • /ユーザー/ID/デバイス[/ID]

コード ( settings.py ) は次のとおりです。

users_schema = {
  'nickName': {
    'type': 'string',
    'required': True,
  },
  'email': {
    'type': 'string',
    'required': True,
    'unique': True
  }
}

devices_schema = {
  'name': {
    'type': 'string',
    'required': True,
  },
  'user_id': {
    'type': 'objectid',
     'data_relation': {
        'resource': 'users',
        'embeddable': True
    },
  }
 }

users = {
  'item_title': 'user',
  'url': 'users',
  'schema': users_schema,
}

user_devices = {
  'resource_title': 'devices',
  'url': 'users/<regex("[a-f0-9]{24}"):user_id>/devices',
  'schema': devices_schema,
  'datasource': {
    'source': 'devices',
  }
}

DOMAIN = {
 'users': users,
 'user_devices': user_devices 
}

ユーザーを作成すると、ユーザー リソースは ( /users/54465ae80640fd0f60f6aa09 )のようになります。

{
"_updated": "Tue, 21 Oct 2014 13:08:56 GMT",
"_etag": "d6ff9457f5b196a8c245a7dc91e7fca0d28c5268",
"_links": {
    "self": {
        "href": "/users/54465ae80640fd0f60f6aa09",
        "title": "user"
    },
    "parent": {
        "href": "",
        "title": "home"
    },
    "collection": {
        "href": "/users",
        "title": "users"
    }
},
"_created": "Tue, 21 Oct 2014 13:08:56 GMT",
"_id": "54465ae80640fd0f60f6aa09",
"nickName": "superuser",
"email": "super@user.com"
}

HATEOAS はデフォルトで有効になっています。前のリソースでは、ユーザー デバイス ( /users/54465ae80640fd0f60f6aa09/devices ) へのリンクを期待していました。このエンドポイントが存在し、コード (user_devices) で定義され、正常に動作するためです。

useruser-devicesの関係を pyhon-eve に理解させて、このデバイス リンクをユーザー リソースに追加できるのは誰ですか? そうしないと、ユーザー 54465ae80640fd0f60f6aa09 はデバイスを取得する方法を知りません。

私は次のようなものを期待しています:

{
"_updated": "Tue, 21 Oct 2014 13:08:56 GMT",
"_etag": "d6ff9457f5b196a8c245a7dc91e7fca0d28c5268",
"_links": {
    "self": {
        "href": "/users/54465ae80640fd0f60f6aa09",
        "title": "user"
    },
    "devices": {
        "href": "/users/54465ae80640fd0f60f6aa09/devices",
        "title": "devices"
    },
    "parent": {
        "href": "",
        "title": "home"
    },
    "collection": {
        "href": "/users",
        "title": "users"
    }
},
"_created": "Tue, 21 Oct 2014 13:08:56 GMT",
"_id": "54465ae80640fd0f60f6aa09",
"nickName": "superuser",
"email": "super@user.com"
}

デバイスを取得する方法が「明白」なのはどこですか。

どうもありがとうございました。

4

2 に答える 2

1

You must add a link between a user => device too

users_schema = {
      'nickName': {
        'type': 'string',
        'required': True,
      },
    'data_relation': {
        'resource': 'user_devices',  # link to device on a field _id
        'field': '_id',
        'embeddable': True
    },
      'email': {
        'type': 'string',
        'required': True,
        'unique': True
      }
    }
于 2016-02-24T22:57:50.013 に答える