HTTP

Posted by DavidEugen on April 09, 2022 · 3 mins read

HTTP

클라이언트에서 서버로 데이터 전송

정적 데이터 조회

  • 이미지, 정적 텍스트 문서 등
  • get

동적 데이터 조회

  • 정렬 필터등..
  • get
  • 쿼리 파라미터 사용해서 데이터 전달

HTML Form 전송

  • 데이터 변경

  • get, post 만 지원

  • post 전송 - 저장

    • Content-Type: application/x-www-form-urlencoded
    • form의 내용을 메시지 바디를 통해서 전송, key=value 형태(query param)
  • get 전송 -저장

    • form의 내용을 url로 전송 , key=value 형태(query param)
    • 리소스 변경에는 사용하지 말것
  • get 전송 -조회

  • multipart/form-data
    • 바이너리 같은 데이터 전송시 사용
    <form method="post" enctype="multipart/form-data"> 
    
    • boundary 로 나뉜다
  • url encoding 처리

HTTP API를 통한 데이터 전송

  • 데이터 변경 ( 서버간, 앱/웹 클라이언트)
  • POST, PUT, PATCH: 메시지 바디를 통해 데이터 전송
  • GET: 조회, 쿼리 파라미터로 데이터 전달
  • 보통 Content-Type: application/json
    • TEXT, XML, JSON 등등

HTTP API 설계

API 설계 -POST 기반 등록

  • 회원 목록 /members -> GET
  • 회원 등록 /members -> POST
  • 회원 조회 /members/{id} -> GET
  • 회원 수정 /members/{id} -> PATCH, PUT, POST
    • patch : 부분적으로 수정
    • put : 완전히 덮어버린다.
    • post: 애매하면 post로
  • 회원 삭제 /members/{id} -> DELETE

POST - 신규자원등록특징

  • 클라이언트는 등록될 리소스의 URI를 모른다.
    • 회원 등록 /members -> POST
    • POST /members
  • 서버가 새로 등록된 리소스 URI를 생성해준다.
    • HTTP/1.1 201 Created

    • Location: /members/100
  • 컬렉션(Collection)
    • 서버가 관리하는 리소스 디렉토리
    • 서버가 리소스의 URI를 생성하고 관리
    • 여기서 컬렉션은 /members

API 설계 - PUT 기반 등록

  • 파일 목록 /files -> GET
  • 파일 조회 /files/{filename} -> GET
  • 파일 등록 /files/{filename} -> PUT
  • 파일 삭제 /files/{filename} -> DELETE
  • 파일 대량 등록 /files -> POST

PUT - 신규자원등록특징

  • 클라이언트가 리소스 URI를 알고 있어야 한다.
    • 파일 등록 /files/{filename} -> PUT
    • PUT /files/star.jpg
  • 클라이언트가 직접 리소스의 URI를 지정한다.
  • 스토어(Store)
    • 클라이언트가 관리하는 리소스 저장소
    • 클라이언트가 리소스의 URI를 알고 관리
    • 여기서 스토어는 /files

URI 설계 개념

문서(document)

  • 단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)
  • 예) /members/100, /files/star.jpg

컬렉션(collection)

  • 서버가 관리하는 리소스 디렉터리
  • 서버가 리소스의 URI를 생성하고 관리
  • 예) /members

스토어(store)

  • 클라이언트가 관리하는 자원 저장소
  • 클라이언트가 리소스의 URI를 알고 관리
  • 예) /files

컨트롤러(controller), 컨트롤 URI

  • 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
  • 동사를 직접 사용
  • 예) /members/{id}/delete