def operation(self, path, methods=Method.GET, resource=None, tags=None, summary=None, middleware=None):
        # type: (UrlPath, Union[Method, Tuple[Method]], Type[Resource], Tags, str, list) -> Operation
        """
        :param path: A sub path that can be used as a action.
        :param methods: HTTP method(s) this function responses to.
        :param resource: Specify the resource that this function encodes/decodes,
            default is the one specified on the ResourceAPI instance.
        :param tags: Tags to be applied to operation
        :param summary: Summary of the what method does (for documentation)
        :param middleware: List of additional middleware

        """
        def inner(callback):
            operation = Operation(callback, path, methods, resource, tags, summary, middleware)
            self.containers.append(operation)
            return operation
        return inner