Simple CRUD - ATOM編
本チュートリアルでは、Docs » チュートリアル » Simple CRUD - シナリオ編
で作成したものと同じ内容をATOM
で開発します。
Warning
シナリオ編で作成したEmployment
データモデルをCRUDするアプリケーションを作成するため、シナリオ編で作成したScenario
とModel
が残っている場合は必ず削除してから本チュートリアルを実施してください。
Step1. ATOMを作成する
ATOMを作成しましょう。以下の定義でATOMを作成してください。
ATOMは、データモデルとAPIを自動生成できます。
Note
自動生成されるAPIの本文構造にATOMクラス名がキーとして挿入される点に特徴があります。本文構造を自由に規定したい場合は、ATOMからのAPI自動生成をオフにしてシナリオでAPIを規定してシナリオのコマンド内でATOMをCRUDすると良いでしょう。
category: Tutorial
name: Employment
persistence: true
api_generation: true
api_basepath: /tutorials
abstract: false
attributes:
identifier:
field_name: entryNumber
field_type: string
field_persistence: true
field_immutable: true
field_metadata:
POST: false
local_fields:
- field_name: firstName
field_type: string
field_persistence: true
field_nullable: true
field_immutable: false
field_unique: false
field_format: '[a-zA-Z]'
field_metadata:
POST: true
PUT: true
- field_name: lastName
field_type: string
field_persistence: true
field_nullable: true
field_immutable: false
field_unique: false
field_format: '[a-zA-Z]'
field_metadata:
POST: true
PUT: true
- field_name: email
field_type: string
field_persistence: true
field_nullable: true
field_immutable: false
field_unique: true
field_format: '^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$'
field_metadata:
POST: true
PUT: true
- field_name: salaryRequirements
field_type: integer
field_persistence: true
field_nullable: true
field_immutable: false
field_unique: false
field_metadata:
POST: true
PUT: true
ref_fields: []
methods:
class_methods: []
instance_methods:
- method_body: |-
async def initialize(self, *args, **kwargs):
if not self.entryNumber:
self.entryNumber = await Counter.allocate("entryNumber")
propagation_mode: true
topdown: true
auto_rollback: true
multiplexable_number: 1
field_order: ascend
ATOMを作成するとEmployment
データモデル、ATOMクラス、APIがすべて自動的に生成されています。
生成されたATOMを操作してみましょう。
>>> amuroray = await atom.Employment(firstName="Ray", lastName="Amuro", email="amuroray@uc.com", salaryRequirements=10000000)↵
... print(amuroray.entryNumber)↵
... ↵
E0007↵
↵
>>> await amuroray.save()↵
... ↵
... employments = await atom.Employment.retrieve()↵
... print(employments)↵
... ↵
[Employment(instance='RW1wbG95bWVudDo1NjAzMzZkNDY2MzExMWU5ODBmMTAwMGMyOWRkODI1MA==', xid=None, xname=None, entryNumber='E0007', firstName='Ray', lastName='Amuro', email='amuroray@uc.com', salaryRequirements=10000000)]↵
↵
>>> await employments[0].save(email="updated@gmail.com")↵
... ↵
... amuroray = await atom.Employment.load("E0007")↵
... print(amuroray.email)↵
... ↵
updated@gmail.com↵
↵
>>> await amuroray.destroy()↵
... ↵
... employments = await atom.Employment.retrieve()↵
... print(employments)↵
... ↵
[]↵
↵
最後にcallout
組込みオブジェクトを使って生成されたAPIをテストしてみましょう。
>>> r = await callout(path="/tutorials/employments", method="POST", body=dict(Employment=dict(firstName="Ray", lastName="Amuro", email="amuroray@uc.com", salaryRequirements=10000000)))↵
... print(json.dumps(json.loads(r.body), indent=4))↵
... ↵
{
"Employment": {
"instance": "RW1wbG95bWVudDpjNDFjMWZiMjY2MzMxMWU5ODBmMTAwMGMyOWRkODI1MA==",
"entryNumber": "E0008",
"firstName": "Ray",
"lastName": "Amuro",
"email": "amuroray@uc.com",
"salaryRequirements": 10000000
}
}↵
↵`
>>> r = await callout(path="/tutorials/employments?firstName=Ray")↵
... print(json.dumps(json.loads(r.body), indent=4))↵
... ↵
[
{
"Employment": {
"instance": "RW1wbG95bWVudDpjNDFjMWZiMjY2MzMxMWU5ODBmMTAwMGMyOWRkODI1MA==",
"entryNumber": "E0008",
"firstName": "Ray",
"lastName": "Amuro",
"email": "amuroray@uc.com",
"salaryRequirements": 10000000
}
}
]↵
↵
>>> r = await callout(path="/tutorials/employments/E0008", method="PUT", body=dict(Employment=dict(email="updated@gmail.com")))↵
... print(json.dumps(json.loads(r.body), indent=4))↵
... ↵
{
"Employment": {
"instance": "RW1wbG95bWVudDpjNDFjMWZiMjY2MzMxMWU5ODBmMTAwMGMyOWRkODI1MA==",
"entryNumber": "E0008",
"firstName": "Ray",
"lastName": "Amuro",
"email": "updated@gmail.com",
"salaryRequirements": 10000000
}
}↵
↵
>>> r = await callout(path="/tutorials/employments/E0008", method="DELETE")↵
... print(r.code)↵
... ↵
204↵
↵
>>> r = await callout(path="/tutorials/employments")↵
... print(json.dumps(json.loads(r.body), indent=4))↵
... ↵
[]↵
↵
以上でSimple CRUD - ATOM編
のチュートリアルは完了です。シナリオ編で紹介したModel
を作成する方法では、データベーススキーマをjsonschemaで定義する作業やデータアクセスのためのSQL文の組み立てなど煩わしく、ATOMを利用することでそれらが簡潔に解決できることを理解できたのではないでしょうか。