code: def parse_request(self, data):
          
          if isinstance(data, bytes):
              data = data.decode()
  
          try:
              req = json.loads(data)
          except Exception as e:
              raise JSONRPCParseError()
  
          if isinstance(req, list):
              # batch request
              requests = JSONRPCBatchRequest()
              for subreq in req:
                  try:
                      requests.append(self._parse_subrequest(subreq))
                  except RPCError as e:
                      requests.append(e)
                  except Exception as e:
                      requests.append(JSONRPCInvalidRequestError())
  
              if not requests:
                  raise JSONRPCInvalidRequestError()
              return requests
          else:
              return self._parse_subrequest(req)
docs: Deserializes and validates a request.
  
          Called by the server to reconstruct the serialized :py:class:`JSONRPCRequest`.
  
          :param bytes data: The data stream received by the transport layer containing the
              serialized request.
          :return: A reconstructed request.
          :rtype: :py:class:`JSONRPCRequest`
          :raises JSONRPCParseError: if the ``data`` cannot be parsed as valid JSON.
          :raises JSONRPCInvalidRequestError: if the request does not comply with the standard.