[개발새발]
277
2020-01-21 11:54:01
8
1033

REST방식에서 post 와 get의 차이


보통 흔히 이야기하는 것이 REST 방식으로 구현할때 http method를 get으로 하는 경우는 보통 select 형태의 쿼리를 수행하는 작업, post는 insert 형태의 쿼리를 수행하는 작업이라고 하던데


어떤 특정값을 json형태로 넘겨주고 그 값에 해당하는 데이터를 select 하는경우

get으로 하는게 의미상 맞을것 같은데 get으로 하면 


정보: HTTP 요청 헤더를 파싱하는 중 오류 발생
비고: HTTP 요청 파싱 오류들이 더 발생하는 경우 DEBUG 레벨 로그로 기록될 것입니다.
java.lang.IllegalArgumentException: 요청 타겟에서 유효하지 않은 문자가 발견되었습니다. 유효한 문자들은 RFC 7230과 RFC 3986에 정의되어 있습니다.
	at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:483)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:682)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

꼭 이에러가 나서

post 방식으로 매핑하면 잘 동작하더라구요


그렇다면 post 방식으로 그냥 두는게 맞는지 아니면 get방식으로 저 에러를 잡아야하는지 의문입니다

0
0
  • 댓글 8

  • 12
    2020-01-21 12:00:07

    Get도 body를 가지나요?

    0
  • [개발새발]
    277
    2020-01-21 12:04:23

    종돌

    아.. 스스로 늪에 빠져있던것 같습니다 

    HTTP 구조를 다시 한번 다져야 겠네요 ㅜㅜ

    코드가 반복되다보니 너무 맹목적으로 사용했던거 같습니다

    0
  • mugi
    211
    2020-01-21 12:23:21

    1. post로 넘기시고 201 created 리스폰스 바디안에 자원정보를 같이 보내주시거나

    2. get 과 post 를 분리하시고 post 결과로 id를 받아 다시 한번 get을 호출하셔요

    0
  • DizY
    229
    2020-01-21 15:19:56

    search / filter 같은 걸 할때 많이 하는 고민 같네요.

    get을 이용하시려면 결국 URL에 파라미터를 넘기는 형태로 보내야 할 거고

    말씀하시는 대로 요청할 경우에는 POST / PUT / PATCH 와 같이 request body도 함께 보내는 메서드를 쓰시는게 맞을 것 같긴 합니다.


    근데 또 HTTP스펙과 달리 엘라스틱서치 같은데서는 GET으로 REQEUST BODY를 보내는 경우도 있긴 한데 지금 작업하시는 라이브러리에서 애초에 지원을 안하신다고 하니 제일 무난하게는 POST로 보내고 자원을 보내주시면 될 것 같아요.

    0
  • DizY
    229
    2020-01-21 15:55:57
    0
  • [개발새발]
    277
    2020-01-21 16:36:48

    DizY

    오호 좋은 자료 감사합니다

    get과 post가 모두 request body를 보낸다면 과연 두차이는 뭘까요

    또 post와 put의 차이도 시맨틱한 차이 말고는 잘 와닿지가 않네요 ㅜ

    저도 rest 관련 자료 찾아보다가 재미있는 영상이 있어 공유합니다



    0
  • DizY
    229
    2020-01-21 17:08:59

    [개발새발]

    진짜 로이 필딩이 말한 Rest API에 대해서는 워낙 다양한 의견이 많아서 저도 뭐라 말씀 못드리지만..

    보통 현업에서 사용하고 있는 REST API에서는 resource와 HTTP METHOD의 동사를 조합하여 행동을 명확히 나타내는 차이가 있다는게 제일 크겠죠. (그 규칙을 이용하면 탐색하기도 편하다는 장점도 있을테구요.)

    그걸 위해 아마 엘라스틱서치는 검색은 결국 Resource를 가져오는 행위이니 메서드를 GET으로 설계했을거구요.

    그런 기준에서 보통 POST는 Resource를 생성하거나, 배치를 수행하도록 요청할때 쓰이는 것이고 GET은 Resource의 정보를 보거나 수행되어야 할 배치를 보는 것에 집중되어있다고 생각합니다. 



    0
  • [개발새발]
    277
    2020-01-21 17:39:49

    DizY

    만든사람은 아니라 하더라도 일단 현업에서 실제 사용하는 정도의 REST 텐션정도를 이해하는 것이 좀더 유연할 수 있겠군요

    좋은 의견 감사합니다

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.