$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WebAPIのPATCHについて
Search
thori
June 03, 2023
Technology
0
220
WebAPIのPATCHについて
WebAPIのPATCHの挙動について改めて調べたことをgunmawebというコミュニティでLTしました。
thori
June 03, 2023
Tweet
Share
More Decks by thori
See All by thori
npmパッケージをMCPによって導入しやすくする
t_pori418
1
58
AIと開発する話をみんなとシェアしたい
t_pori418
1
140
AIとプロダクトエンジニア
t_pori418
0
120
AIの言う通りにやったら Webアプリが作れるのか試してみた (ChatGPT)
t_pori418
0
1.1k
AWSにおけるアカウント/ユーザーとは何かをなんとなく理解する
t_pori418
0
380
Markdownで登壇資料を作りたい
t_pori418
0
490
GitHub Projectsのみでプロダクト開発を管理する
t_pori418
0
350
Nuxt.jsから始めるPWA生活
t_pori418
0
1.2k
10分でAmazon API GatewayにOpen API 3.0のAPI仕様をインポートする
t_pori418
1
1.2k
Other Decks in Technology
See All in Technology
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
740
グレートファイアウォールを自宅に建てよう
ctes091x
0
150
[JAWS-UG 横浜支部 #91]DevOps Agent vs CloudWatch Investigations -比較と実践-
sh_fk2
2
260
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
1.3k
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
490
Gemini でコードレビュー知見を見える化
zozotech
PRO
1
250
初めてのDatabricks AI/BI Genie
taka_aki
0
150
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
1
140
30分であなたをOmniのファンにしてみせます~分析画面のクリック操作をそのままコード化できるAI-ReadyなBIツール~
sagara
0
140
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
160
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
1
770
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
How to Ace a Technical Interview
jacobian
280
24k
Writing Fast Ruby
sferik
630
62k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
4 Signs Your Business is Dying
shpigford
186
22k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
100
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Optimizing for Happiness
mojombo
379
70k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Transcript
WebAPIのPATCHについて Takashi Hori
自己紹介 Twitter: @t_pori418 From: 神奈川(now) <- 館林生まれ Work: (近況) 都内のWeb系でチームのTechleadをしています。
副業で0->1のWebエンジニアもやってます。 Language: Ruby, PHP, C#, Python, TypeScript
問: REST API、作ってますか?
ふわっとした知識で話すとよく発生する議論 • 更新処理ってPUTでいいんだっけ?PATCH?どっち? • 更新処理を実装する時、「フィールドがない」「null」「空」の扱いってどうなるんだっ け?
PUTとPATCHについて 一般的には... • PUT ◦ 渡されて来たパラメータでデータを置き換える( nullやundefinedも) ◦ つまりモデルをdelete ->
insertする • PATCH ◦ 渡されてきたパラメータのみデータを置き換える ◦ つまり部分更新が可能
でも結構適当にやってるパターン、よく見ませんか? • 更新処理は一律PUT!そもそもRESTfulな設計は業務アプリでは無理だし! • 返却するステータスコードは全部200で! とか 正直、HTTPのメソッドやステータスコードはなんでも動くんですが、 API実装する側も利用する側も挙動が決まってないと困りませんか? 困りそうだったので一般的にはどうなのか調べました 基本はさっきのスライドの通り、PUTはdelete
-> insertなのでPATCHについて。
定番のChatGPT(無料版)に聞くやつ
RFC7396 For example, given the following original JSON document: Changing
the value of "a" and removing "f" can be achieved by sending: { "a": "b", "c": { "d": "e", "f": "g" } } RFC7396 - JSON Merge Patch 日本語訳 https://tex2e.github.io/rfc-translater/html/rfc7396.html PATCH /target HTTP/1.1 Host: example.org Content-Type: application/merge-patch+json { "a":"z", "c": { "f": null } } ターゲットリソースに適用されると、「 a」メンバーの値は「z」に 置き換えられ、「f」は削除され、残りのコンテンツはそのままに なります。
考えたこと • nullはDB設計次第だが、許容しないようにバリデーションで弾くケースが多そう。だ けど基本的にRFCに則った実装にしておくのが無難そう • RESTfulなAPIではなく、子のモデルも一緒に更新処理かけたい時どうするか問題 ◦ 例えばorders.order_detailsみたいなのがあった時、 order変更APIで、order_deitalsの配列を ごそっと一緒に替えたい。置き換えるのか?とか。そこだけ
PUTみたいな挙動になっちゃう { "amount": 1100, "tax": 100, "order_details": [ {id: 1, product_id: 1, amount: 400, tax: 40, tax_rate: 10}, {id: 2, product_id: 2, amount: 600, tax: 60, tax_rate: 10} ] }
配列による更新について、個人的には... • 配列内のオブジェクトそれぞれidをリクエストパラメータに含められるなら ◦ あったら更新、なかったら削除、新しいものは作成という挙動がよさそう • 配列内のオブジェクトそれぞれidをリクエストパラメータに持てない場合 ◦ 紐づくデータを削除→渡されたものをinsertという挙動がよさそう そもそも中身のリソースは
PATCH /order_details/{id} で更新をかけていくのが、あるべ き姿なのでは?みたいな意見ありそう こういう事例あるよ、とかあったらぜひ教えてください
以上です! 良い更新処理実装ライフを!