Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WebAPIのPATCHについて
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
thori
June 03, 2023
Technology
260
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebAPIのPATCHについて
WebAPIのPATCHの挙動について改めて調べたことをgunmawebというコミュニティでLTしました。
thori
June 03, 2023
More Decks by thori
See All by thori
意図通りに実装 させるということ
t_pori418
1
120
Cursor My事例
t_pori418
1
77
npmパッケージをMCPによって導入しやすくする
t_pori418
1
120
AIと開発する話をみんなとシェアしたい
t_pori418
1
180
AIとプロダクトエンジニア
t_pori418
0
150
AIの言う通りにやったら Webアプリが作れるのか試してみた (ChatGPT)
t_pori418
0
1.2k
AWSにおけるアカウント/ユーザーとは何かをなんとなく理解する
t_pori418
0
430
Markdownで登壇資料を作りたい
t_pori418
0
530
GitHub Projectsのみでプロダクト開発を管理する
t_pori418
0
370
Other Decks in Technology
See All in Technology
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
150
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
400
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
0
110
omasushiというライブラリを作った
polidog
PRO
0
170
10分で知る最近のOmarchy
komagata
0
200
enechainの内製セルフサービスプラットフォーム
hiyosi
0
150
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
170
Webとヘルスデータ
yukukotani
1
200
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
120
「図書館」という名前のままでいいのか -Code4Lib JAPANカンファレンス2026 アンカンファレンス報告- / Code4Lib JAPAN Conference 2026: Unconference Report
ykiyota
0
130
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
4
1k
Code4Lib JAPANカンファレンス2026 開会挨拶 / Code4Lib JAPAN Conference 2026: Opening Remarks
ykiyota
0
270
Featured
See All Featured
Leo the Paperboy
mayatellez
8
2.2k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
The SEO Collaboration Effect
kristinabergwall1
1
550
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Designing for humans not robots
tammielis
254
26k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
510
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
How GitHub (no longer) Works
holman
316
150k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
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} で更新をかけていくのが、あるべ き姿なのでは?みたいな意見ありそう こういう事例あるよ、とかあったらぜひ教えてください
以上です! 良い更新処理実装ライフを!