Hyperlambda endpoints and meta information

This page is part of the magic.endpoint documentation.

Hyperlambda endpoints and meta information

Due to the semantic structure of Hyperlambda, retrieving meta information from your HTTP endpoints using this module is very easy. The project has one slot called [endpoints.list] that returns meta information about all your endpoints. This slot again can be invoked using the following URL.

http://localhost:5000/magic/system/endpoints/list

This endpoint/slot will semantically traverse your endpoints, recursively loading up all Hyperlambda files from disc that are resolved from a valid URL, and return meta information about the file/endpoint back to the caller. This allows the system to easily figure out things such as the following about your endpoints.

  • What is the endpoint’s HTTP VERB
  • What is the endpoint’s URL
  • What arguments can the endpoint handle
  • Has the file been given a friendly description, through a [.description] node
  • Etc …

This slot/endpoint is what allows you to see meta information about all your HTTP REST endpoints in the “Endpoints” menu item in the Magic dashboard for instance. The return value from this slot/endpoint again, is what’s used as some sort of frontend is being generated using the Magic dashboard.

Extending the meta data retrieval process

You can extend the meta data retrieval process by invoking ListEndpoints.AddMetaDataResolver, and pass in your own function. This class can be found in the magic.endpoint.services.slots namespace. The AddMetaDataResolver method takes one function object, which will be invoked for every file the meta generator is trying to create meta data for, with the complete lambda, verb and args of your endpoint. This allows you to semantically traverse the lambda/args nodes, and append any amount of (additional) meta information you wish - Allowing you to extend the generating of meta data, if you have some sort of general custom Hyperlambda module, creating custom HTTP endpoints of some sort.

This function will be invoked for every single Hyperlambda file in your system, every time meta data is retrieved, so you might want to ensure it executes in a fairly short amount of time, not clogging the server or HTTP endpoint meta generating process in any ways.

Changing your Hyperlambda endpoint’s response type

Unless you explicitly change the Content-Type of your response object, by using the [response.headers.set] slot, a Content-Type of application/json will be assumed, and this header will be added to the resulting HTTP response object. If you wish to override this behavious and return plain text for instance, you could create an endpoint containing the following.

response.headers.set
   Content-Type:text/plain
return:Hello from Magic Backend

If you intend to return anything but JSON, you must set the Content-Type header, because the resolver will by default try to serialize your content as JSON, and obviously fail unless it is valid JSON. You can also return stream objects using for instance the [return-value] slot, at which point ASP.NET Core will automatically stream your content back over the response object, and Dispose your stream automatically for you afterwards. This allows you to for instance return large files back to the client without loading them into memory first. If you do this, you’ll have to change your Content-Type accordingly.


← Accepted Content-Type values for Hyperlambda endpoints all of magic.endpoint Hyperlambda code behind files →