Post

2024-04-25-TIL

2024-04-25-TIL

Today I Learned

Posting a File Associated Data to RESTful API

파일을 업로드 하는 속도가 빠르고 용량이 작다면 문제가 되지않는다. 하지만 충분히 큰 용량에 속도가 좀 걸리는 형태라면 기본적으로 비동기 요청을 하는것이 좋을것이다. 외부 솔루션을 쓰는 형태라면 해당 API를 통해서 업로드를 하고 파일 경로를 받아와서 요청에 포함하여 메타정보를 매핑할 수 있을것이다. 하지만 파일업로드 시 ID가 반드시 필요한 경우라면, 메타 저장 API를 먼저 호출하고 ID를 응답으로 받은 후 파일업로드 API를 호출하면 된다.

파일과 메타정보를 함께 요청해서 즉시 저장하는 방법도 있는데, 이때는 HTTP 규격상 반드시 multipart/form-data를 사용해야한다. 개인적으로 아주 작은 파일이면 몰라도 용량이 큰 파일이 포함된다면 반드시 파일업로드 API는 분리하고, ID를 반드시 알아야하는 등의 정책은 제외하는게 좋다고 생각한다. 파일 업로드는 별도로 구성할 수 있어야하며 언제든지 외부 솔루션으로 대체할 수 있는 구조이어야 하는게 좋을 것이다.

  • https://stackoverflow.com/questions/4083702/posting-a-file-and-associated-data-to-a-restful-webservice-preferably-as-json
  • https://medium.com/agileinsider/rest-api-file-upload-best-practicr-1fae869565c0
  • https://www.reddit.com/r/webdev/comments/mzhssd/best_practice_to_upload_images_together_with_form/
  • https://community.make.com/t/multipart-form-data-with-json/1245
  • https://stackoverflow.com/questions/18240692/is-using-multipart-form-data-any-better-then-json-base64

Multipart/form-data

  • https://varaprasadh.medium.com/what-the-heck-is-multipart-form-data-8df091d598b5
  • https://velog.io/@ryan-son/multipartform-data-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-vs-applicationjson
  • https://velog.io/@huewilliams/%ED%8C%8C%EC%9D%BC%EA%B3%BC-JSON-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%8F%99%EC%8B%9C%EC%97%90-%EB%B3%B4%EB%82%B4%EA%B8%B0-1%ED%8E%B8-feat.Multipartform-data

Content-Type

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type

MIME Type

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
  • https://datatracker.ietf.org/doc/html/rfc6838

Datadog RUM

  • https://docs.datadoghq.com/ko/real_user_monitoring/browser/

Datadog Replay

  • https://www.datadoghq.com/dg/real-user-monitoring/session-replay/?utm_source=google&utm_medium=paid-search&utm_campaign=dg-rum-apac-sessionreplay&utm_keyword=rum%20session%20replay&utm_matchtype=p&igaag=128038923739&igaat=&igacm=14749883168&igacr=638571984844&igakw=rum%20session%20replay&igamt=p&igant=g&utm_campaignid=14749883168&utm_adgroupid=128038923739&gad_source=1&gclid=CjwKCAjw26KxBhBDEiwAu6KXt8Xo1kM-qrAUbteufS9ow56QJGUUNgnYhPlFN6gQroHY8RMUo829EBoCCGEQAvD_BwE
This post is licensed under CC BY 4.0 by the author.