2017-08-23 9 views
1

1つのApiResourceに、normalization_contextfiltersの3つのコレクション操作があります。コレクション内のフィルタを管理する最適な方法

  • /equipments(現在のユーザにフィルタリングされた)すべての機器
  • /equipments/Aは、すべての機器のマッチングを取得する取得
  • /equipments/B一部のフィルタは、ネストされたプロパティに設定されたルールB

に一致するすべての設備を取得するルール(関連エンティティのID)。私はAPIコンシューマーに特定のフィルターに使用できる値を与えたいと思います。たとえば、すべてのエンドポイントで共有される会社フィルタがあるとします。許容値は1,2,3

  • /equipments/Aために許可される値は4,5,6
  • /equipments/Bために許可される値は1,3,5
  • されているれている
  • /equipmentsについて

      私が見る解決策は、許可された値でフィルタを返す操作ごとにエンドポイントを.../filtersに追加することです。

      GET /equipments/filters 
      
      [ 
          { 
           'name': 'company', 
           'type': integer, 
           'choices': [ 
            'Company 1': 1, 
            'Company 2': 2, 
            'Company 3': 3, 
           ] 
          }, 
          { 
           'name': 'operator', 
           'type': autocomplete, 
           'url': /equipments/filters/operator?q={q} 
          } 
      ] 
      

      ボーナス質問:これは良い解決策であれば、どのように私はJSON-LD /ハイドラのドキュメントで論文操作を追加することができますか?

  • 答えて

    1

    SwaggerやJSON-LD(APIプラットフォームでサポートされている)を含むほとんどのAPIドキュメント形式では、何かカスタムを行うことなくフィルタに有効な値を指定できます。あなたはヒドラを使用したい場合は、あなたが望むものを達成するためのテンプレートのリンクを使用することができますhttps://swagger.io/docs/specification/2-0/enums/

    paths: 
        /equipments/B: 
        get: 
         parameters: 
         - in: query 
          name: company 
          description: A company filter 
          type: integer 
          enum: [1, 3, 5] 
    

    :闊歩して

    、あなたが定義されている有効な値にparameterオブジェクトのenumプロパティを使用することができます

    { 
        "@context": "http://www.w3.org/ns/hydra/context.jsonld", 
        "@type": "IriTemplate", 
        "template": "/equipments/B{?company}", 
        "mappings": [ 
        { 
         "@type": "IriTemplateMapping", 
         "variable": "company", 
         "property": "http://example.com/myCompanyType" 
        } 
        ] 
    } 
    

    次に、適用可能な値を返すエンドポイントを追加することによって値を動的に返すか、またはリストが静的である場合は語彙の語彙に直接値を返す必要があります(例:http://schema.org/ActionStatusType)。

    APIプラットフォームにこのような情報を追加するには、ドキュメントを生成する組み込みサービスを飾る必要があります。スワッガーの例:https://github.com/api-platform/docs/blob/master/core/swagger.md#override-swagger-documentation

    +0

    私はHydra仕様のテンプレートリンクについて読んだことがあります。しかし、適用可能な値のエンドポイントを追加する場所はわかりません。 – Erwan

    +0

    IRIを 'property'値に入れることができます。 –

    +0

    各 '/ equipements'エンドポイントごとに異なることがあります。 しかし、ネットワークパフォーマンスの観点からは最適ではありません。フィルターを使用してリストを表示するには、フィルターごとに追加の要求を行う必要があります。 – Erwan

    関連する問題