Phoenix API로 낙타 케이스와 뱀 케이스를 자동 변환
이것을 쉽게 실현하는 것이 proper_case 입니다. proper_case 는 맵의 키를 뱀과 낙타 사이에 서로 변환하는 라이브러리이지만, 이것을 Phoenix 프로젝트에서 사용하는 것으로 낙타와 뱀의 자동 변환을 가능하게 합니다.
다음 기사에서는 proper_case를 사용하여 낙타와 뱀으로 변환하는 방법에 대해 설명합니다.
환경
본 기사의 내용은, 이하의 환경에서 동작 확인을 하고 있습니다.
API 서버 준비
설명을 단순화하기 위해 blogs
와 comments
라는 테이블이있는 블로그 API를 가정해 보겠습니다.
mix phx.new
명령에서 json_app
라는 Phoenix 프로젝트를 만들고 router, controller 및 view 를 각각 다음과 같이 설정합니다.
router.exdefmodule JsonAppWeb.Router do
use JsonAppWeb, :router
pipeline :api do
plug(:accepts, ["json"])
end
scope "/api", JsonAppWeb do
pipe_through(:api)
resources("/blogs", BlogController)
end
end
blog_controller.exdefmodule JsonAppWeb.BlogController do
use JsonAppWeb, :controller
alias JsonApp.Contents
alias JsonApp.Contents.Blog
def index(conn, _params) do
blogs = Contents.list_blogs()
render(conn, "index.json", blogs: blogs)
end
end
blog_view.exdefmodule JsonAppWeb.BlogView do
use JsonAppWeb, :view
alias JsonAppWeb.BlogView
def render("blog.json", %{blog: blog}) do
%{
id: blog.id,
blog_title: blog.blog_title,
blog_body: blog.blog_body,
comments: blog.blog_comments |> Enum.map(&comments(&1))
}
end
def comments(comment) do
%{
comment: comment.comment,
comment_by: comment.comment_by
}
end
end
위와 같이 설정한 후 /api/blogs
API를 호출하면 다음과 같은 응답이 반환됩니다.
JSON 응답{
"data": [
{
"id": 1,
"comments": [
{
"comment_by": "Honda",
"comment": "Congrats!"
},
{
"comment_by": "Naomi",
"comment": "Wow"
}
],
"blog_title": "First blog",
"blog_body": "This is my first blog!"
}
]
}
이러한 API 상호 작용을 Camel Case로 만들기 위해 다음 섹션에서 proper_case 설정을 시도합니다.
proper_case 사용
그럼 proper_case 의 README 에 따라 설정을 합시다.
설치
proper_case 를 설치하려면 mix.exs
에 proper_case 의 deps 를 추가합니다.
defp deps do
[
{:proper_case, "~> 1.2"}
]
end
router 설정
router.ex
를 열고 :api
의 pipeline
에 ProperCase.Plug.SnakeCaseParams
의 플러그를 추가합니다.
pipeline :api do
plug(:accepts, ["json"])
plug(ProperCase.Plug.SnakeCaseParams)
end
config 설정
config.exs
를 열고 다음 설정을 추가합니다.
config :phoenix, :format_encoders, json: ProperCase.JSONEncoder.CamelCase
설정은 이상입니다. view나 controller는 일절 변경할 필요가 없습니다.
API 응답 확인
이제 /api/blogs
의 API 응답을 다시 확인해 봅시다.
{
"data": [
{
"id": 1,
"comments": [
{
"commentBy": "Honda",
"comment": "Congrats!"
},
{
"commentBy": "Naomi",
"comment": "Wow"
}
],
"blogTitle": "First blog",
"blogBody": "This is my first blog!"
}
]
}
응답의 JSON 키가 모두 낙타 케이스가 되어 있는지 확인할 수 있습니다.
또, 여기에서 행한 변경에 의해, API에 건네주는 파라미터도 캬멜 케이스로 할 수 있습니다. 예를 들어 새로 blog를 create 하는 경우에도, blotTitle
, blogBody
와 같은 파라미터명을 지정해 리퀘스트를 보낼 수가 있습니다. 이 경우, plug 로 설정한 ProperCase.Plug.SnakeCaseParams
에 의해, controller 에 건네받는 각 파라미터는 자동적으로 뱀 케이스가 됩니다.
이와 같이 proper_case
를 사용하는 것으로, 클라이언트는 캬멜 케이스, Phoenix는 스네이크 케이스와, 각각의 언어 사양에 따른 형태로 변수명등의 기술에 집중할 수가 있습니다. 매우 편리합니다
Reference
이 문제에 관하여(Phoenix API로 낙타 케이스와 뱀 케이스를 자동 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Tsuyoshi84/items/3fc014f56efb8f128c59
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
defmodule JsonAppWeb.Router do
use JsonAppWeb, :router
pipeline :api do
plug(:accepts, ["json"])
end
scope "/api", JsonAppWeb do
pipe_through(:api)
resources("/blogs", BlogController)
end
end
defmodule JsonAppWeb.BlogController do
use JsonAppWeb, :controller
alias JsonApp.Contents
alias JsonApp.Contents.Blog
def index(conn, _params) do
blogs = Contents.list_blogs()
render(conn, "index.json", blogs: blogs)
end
end
defmodule JsonAppWeb.BlogView do
use JsonAppWeb, :view
alias JsonAppWeb.BlogView
def render("blog.json", %{blog: blog}) do
%{
id: blog.id,
blog_title: blog.blog_title,
blog_body: blog.blog_body,
comments: blog.blog_comments |> Enum.map(&comments(&1))
}
end
def comments(comment) do
%{
comment: comment.comment,
comment_by: comment.comment_by
}
end
end
{
"data": [
{
"id": 1,
"comments": [
{
"comment_by": "Honda",
"comment": "Congrats!"
},
{
"comment_by": "Naomi",
"comment": "Wow"
}
],
"blog_title": "First blog",
"blog_body": "This is my first blog!"
}
]
}
그럼 proper_case 의 README 에 따라 설정을 합시다.
설치
proper_case 를 설치하려면
mix.exs
에 proper_case 의 deps 를 추가합니다. defp deps do
[
{:proper_case, "~> 1.2"}
]
end
router 설정
router.ex
를 열고 :api
의 pipeline
에 ProperCase.Plug.SnakeCaseParams
의 플러그를 추가합니다. pipeline :api do
plug(:accepts, ["json"])
plug(ProperCase.Plug.SnakeCaseParams)
end
config 설정
config.exs
를 열고 다음 설정을 추가합니다.config :phoenix, :format_encoders, json: ProperCase.JSONEncoder.CamelCase
설정은 이상입니다. view나 controller는 일절 변경할 필요가 없습니다.
API 응답 확인
이제
/api/blogs
의 API 응답을 다시 확인해 봅시다.{
"data": [
{
"id": 1,
"comments": [
{
"commentBy": "Honda",
"comment": "Congrats!"
},
{
"commentBy": "Naomi",
"comment": "Wow"
}
],
"blogTitle": "First blog",
"blogBody": "This is my first blog!"
}
]
}
응답의 JSON 키가 모두 낙타 케이스가 되어 있는지 확인할 수 있습니다.
또, 여기에서 행한 변경에 의해, API에 건네주는 파라미터도 캬멜 케이스로 할 수 있습니다. 예를 들어 새로 blog를 create 하는 경우에도,
blotTitle
, blogBody
와 같은 파라미터명을 지정해 리퀘스트를 보낼 수가 있습니다. 이 경우, plug 로 설정한 ProperCase.Plug.SnakeCaseParams
에 의해, controller 에 건네받는 각 파라미터는 자동적으로 뱀 케이스가 됩니다.이와 같이
proper_case
를 사용하는 것으로, 클라이언트는 캬멜 케이스, Phoenix는 스네이크 케이스와, 각각의 언어 사양에 따른 형태로 변수명등의 기술에 집중할 수가 있습니다. 매우 편리합니다
Reference
이 문제에 관하여(Phoenix API로 낙타 케이스와 뱀 케이스를 자동 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Tsuyoshi84/items/3fc014f56efb8f128c59텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)