def read(self, params=None, args=None, data=None):
        # type: (str, dict, dict) -> Union[List[AppModel], AppModel]
        """
        GET /resource/model_cls/[params:id]?[args:{limit,offset,page,per_page,filter_by,order_by,related,fields}]

        Get resource/s

        :param params
        :type params list
        :param args
        :type args dict
        :param data
        :type data: dict
        """
        if params is None:
            params = []
        if args is None:
            args = {}

        ctx = self._create_context(params, args, data)
        row_id = ctx.get_row_id()

        if row_id:
            return self._get_one(row_id, ctx)

        elif 'count' in args:
            return self._get_collection_count(ctx)

        elif 'desc' in args:
            return self._get_collection_desc(ctx)

        else:
            if 'page' in ctx.args:
                page_to_offset(ctx.args)

            return self._get_collection(ctx)
GET /resource/model_cls/[params:id]?[args:{limit,offset,page,per_page,filter_by,order_by,related,fields}]

        Get resource/s

        :param params
        :type params list
        :param args
        :type args dict
        :param data
        :type data: dict