code: def node_neighbors(node_id):
      
      exp = experiment(session)
  
      # get the parameters
      node_type = request_parameter(parameter="node_type",
                                    parameter_type="known_class",
                                    default=models.Node)
      failed = request_parameter(parameter="failed",
                                 parameter_type="bool",
                                 default=False)
      connection = request_parameter(parameter="connection", default="to")
      for x in [node_type, failed, connection]:
          if type(x) == Response:
              return x
  
      # make sure the node exists
      node = models.Node.query.get(node_id)
      if node is None:
          return error_response(
              error_type="/node/neighbors, node does not exist",
              error_text="/node/{}/neighbors, node {} does not exist"
              .format(node_id))
  
      # get its neighbors
      nodes = node.neighbours(
          type=node_type,
          failed=failed,
          connection=connection)
  
      try:
          # ping the experiment
          exp.node_get_request(
              node=node,
              nodes=nodes)
          session.commit()
      except:
          return error_response(error_type="exp.node_get_request")
  
      return success_response(field="nodes",
                              data=[n.__json__() for n in nodes],
                              request_type="neighbors")
docs: Send a GET request to the node table.
  
      This calls the neighbours method of the node
      making the request and returns a list of descriptions of
      the nodes (even if there is only one).
      Required arguments: participant_id, node_id
      Optional arguments: type, failed, connection
  
      After getting the neighbours it also calls
      exp.node_get_request()