En incluant un sérialiseur, vous pouvez facilement formater les données renvoyées par json.
Gemfile
...
+ # serializer
+ gem "active_model_serializers"
$ bundle
Une fois installé, créez un sérialiseur de post-modèle et un fichier de paramètres ActiveModelSerializer.
$ rails g serializer post
$ touch config/initializers/active_model_serializer.rb
app/serializers/post_serializer.rb
# frozen_string_literal: true
#
# post serializer
#
class PostSerializer < ActiveModel::Serializer
attributes :id
end
config/initializers/active_model_serializer.rb
# frozen_string_literal: true
ActiveModelSerializers.config.adapter = :json
app/controllers/v1/posts_controller.rb
def index
posts = Post.order(created_at: :desc).limit(20)
- render json: { posts: posts }
+ render json: posts
end
def show
- render json: { post: @post }
+ render json: @post
end
def create
post = Post.new(post_params)
if post.save
- render json: { post: post }
+ render json: post
else
render json: { errors: post.errors }
end
@@ -27,7 +27,7 @@ module V1
def update
if @post.update(post_params)
- render json: { post: @post }
+ render json: @post
else
render json: { errors: @post.errors }
end
@@ -35,7 +35,7 @@ module V1
def destroy
@post.destroy
- render json: { post: @post }
+ render json: @post
end
Une fois que vous avez fait cela, arrêtez rails s
et redémarrez.
$ curl localhost:8080/v1/posts
{"posts":[{"id":20},{"id":19},{"id":18},{"id":17},{"id":16},{"id":15},{"id":14},{"id":13},{"id":12},{"id":11},{"id":10},{"id":9},{"id":8},{"id":7},{"id":6},{"id":5},{"id":4},{"id":3},{"id":2},{"id":1}]}
$ curl localhost:8080/v1/posts/1
{"post":{"id":1}}
J'ai pu obtenir une liste d'identifiants car je n'ai utilisé que des identifiants dans le sérialiseur. Ajoutons maintenant le sujet et le corps.
app/serializers/post_serializer.rb
# frozen_string_literal: true
#
# post serializer
#
class PostSerializer < ActiveModel::Serializer
- attributes :id
+ attributes :id, :subject, :body
end
$ curl localhost:8080/v1/posts
{"posts":[{"id":20,"subject":"Inutile","body":"Le calmar de l'abeille. Rancune violente de sang. Les ruines cachées."},...
curl localhost:8080/v1/posts/1
{"post":{"id":1,"subject":"hello","body":"Lieutenant-général de police. Meishibokin Katamichi. Traditionnel Tokugawa super ~.
Cela semble fonctionner normalement. Exécutons également rubocop et rspec et validons s'il n'y a pas de problème.
→ Création d'une API de tableau d'affichage avec certification et autorisation dans Rails 6 # 10 devise_token_auth introduite [Vers la table de sérialisation]
Recommended Posts