import logging
 import traceback
 
-from drf_yasg.utils import swagger_auto_schema
+from drf_yasg.utils import no_body, swagger_auto_schema
 from rest_framework import status
 from rest_framework.decorators import api_view
 from rest_framework.response import Response
 
-from catalog.packages.biz.ns_descriptor import create
+from catalog.packages.biz.ns_descriptor import create, query_multiple
 from catalog.packages.serializers.create_nsd_info_request import \
     CreateNsdInfoRequestSerializer
 from catalog.packages.serializers.nsd_info import NsdInfoSerializer
+from catalog.packages.serializers.nsd_infos import NsdInfosSerializer
 from catalog.pub.exceptions import CatalogException
 
 logger = logging.getLogger(__name__)
     }
 )
 # @api_view(http_method_names=['GET'])
-def query_ns_descriptors(self, request):
+def ns_info_rd(request):
     # TODO
     return None
 
         status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
     }
 )
-@api_view(http_method_names=['POST'])
-def create_ns_descriptors(request, *args, **kwargs):
-    try:
-        create_nsd_info_requst = CreateNsdInfoRequestSerializer(data=request.data)
-        if not create_nsd_info_requst.is_valid():
-            raise CatalogException
-        data = create(create_nsd_info_requst.data)
-        nsd_info = NsdInfoSerializer(data=data)
-        if not nsd_info.is_valid():
-            raise CatalogException
-        return Response(data=data, status=status.HTTP_201_CREATED)
-    except CatalogException:
-        logger.error(traceback.format_exc())
-        return Response(data={'error': 'Creating nsd info failed.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+@swagger_auto_schema(
+    method='GET',
+    operation_description="Query multiple NS descriptor resources",
+    request_body=no_body,
+    responses={
+        status.HTTP_200_OK: NsdInfosSerializer(),
+        status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
+    }
+)
+@api_view(http_method_names=['POST', 'GET'])
+def ns_descriptors_rc(request, *args, **kwargs):
+    if request.method == 'POST':
+        try:
+            create_nsd_info_requst = CreateNsdInfoRequestSerializer(data=request.data)
+            if not create_nsd_info_requst.is_valid():
+                raise CatalogException
+            data = create(create_nsd_info_requst.data)
+            nsd_info = NsdInfoSerializer(data=data)
+            if not nsd_info.is_valid():
+                raise CatalogException
+            return Response(data=nsd_info.data, status=status.HTTP_201_CREATED)
+        except CatalogException:
+            logger.error(traceback.format_exc())
+            return Response(data={'error': 'Creating nsd info failed.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+    if request.method == 'GET':
+        try:
+            data = query_multiple()
+            nsd_infos = NsdInfosSerializer(data=data)
+            if not nsd_infos.is_valid():
+                raise CatalogException
+            return Response(data=nsd_infos.data, status=status.HTTP_200_OK)
+        except CatalogException:
+            logger.error(traceback.format_exc())
+            return Response(
+                data={'error': 'Query of multiple NS descriptor resources failed.'},
+                status=status.HTTP_500_INTERNAL_SERVER_ERROR
+            )