3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

必要な概念

  • まずAPIの完成を定義すること
    • リクエストに応じてデータをDBから抽出し、必要に応じて加工、レスポンスとして返却する。
  • 抽出、加工、返却の流れがわかりやすいコードになっていること。

読みやすいAPIを実装するにあたって

API以外の実装にも言えるが下記を意識する。

rubyの場合

コードの流れに設計の概念が反映されているか

  • 配列操作がしっかりと目的に応じて使い分けられていること

    • mapは各要素に対して処理を行い新しい配列を返す
    • selectは条件式に応じて配列から要素を抽出する
    • flattenは配列の入れ子構造を均して1次元配列にする
      • これらの用途に当てはまらないが操作が必要な時に消去法でfor文を使う
  • 一度しか呼ばれない処理はループに入れない

  • 戻り値を入れる変数とメソッド名を見てどのような値がくるかをわかるようにする

    • その呼び出されるメソッドはプライベートメソッドなどにして分けておく
    • 例:ECモールにおいてユーザーの好みに応じてレコメンド商品を取得するAPI(ruby on railsを使用)
    def index
    	# インスタンス変数にログインしたユーザー情報が入っていると仮定
    	user = @user
    
    	# パスパラメーターとクエリパラメーターをそれぞれハッシュにまとめる
        path_params = params.slice(:shop_id)
        query_params = params.slice(:order_by, :sort_direction, :limit, :offset)
        # パスパラメーターとクエリパラメーターを一つのハッシュに結合する
        parameters = path_params.merge(query_params)
    
    	# リポジトリから商品を取得
    	item_repository = Api::ItemRepository.new()
    	items = item_repository.find_all_by_shop_id(parameters)
    
    	#ユーザーの好みに応じてレコメンド商品を取得
    	recommend_items_by_user_preferences = select_items_by_user_preferences(items,user_id)
    	
    	return recommend_items_by_user_preferences
    
    def select_items_by_user_preferences(items,user_id)
    	# ユーザーの好みに応じてレコメンド商品を取得するロジック
    

    select_items_by_user_preferencesがindexから出されることで、index内の処理の流れが見やすくなる。

    またrecommend_items_by_user_preferencesという変数名からどういった値が来るのか想像がつき実際のロジックを見なくても処理の流れを推測できる。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?