Jump to content

AutoIt-API-WS - An expressive HTTP server you can use to build your own API with (Screenshots)

Recommended Posts

About AutoIt-API-WS

AutoIt-API-WS is a light weight web server with expressive syntax, with the sole purpose of wrapping your existing AutoIt app with little to no effort.

With AutoIt-API-WS you can send and receive data between any application or framework, as long they can handle HTTP requests, which is an industry standard today.

Like my other communcations UDF AutoIt-Socket-IO AutoIt-API-WS is heavily inspired from the big boys, but this time its Laravel and Ruby on Rails.

Features Highlights

  • No external or internal dependencies required
  • RESTful mindset when designed
  • Expressive syntax
  • Small codebase
  • Heavy use of Michelsofts Dictionary object


  • Not complient with any RFC, so something important could be missing. Time will tell!
  • One persons slow loris attack will kill the process forever.

Example of implemetnation (With screenshots)

This is a basic cRud operation with the RESTful mindset in use.

#include "API.au3"
#include <Array.au3>

_API_MGR_SetName("My APP DB adapter")
_API_MGR_SetVer("1.0 BETA")
_API_MGR_SetDescription("This adapter allows you to get this n that")

_API_MGR_ROUTER_GET('/users', CB_GetUsers, 'string sortBy', 'Get all users, sortBy can be either asc or desc. asc is default')
_API_MGR_ROUTER_GET('/users/{id}', CB_GetUsersById, 'int id*', 'Get user by id')


Func DB_GetUsers()
	Local $userA = ObjCreate("Scripting.Dictionary")
	Local $userB = ObjCreate("Scripting.Dictionary")

	$userA.add('id', 1)
	$userA.add('name', 'TarreTarreTarre')
	$userA.add('age', 27)

	$userB.add('id', 2)
	$userB.add('name', @UserName)
	$userB.add('age', 22)

	Local $aRet = [$userA, $userB]

	Return $aRet

Func CB_GetUsers(Const $oRequest)
	Local $aUsers = DB_GetUsers()

	If $oRequest.exists('sortBy') Then

		Switch $oRequest.item('sortBy')
			Case Default
			Case 'asc'

			Case 'desc'


	Return $aUsers


Func CB_GetUsersById(Const $oRequest)

	Local Const $aUsers = DB_GetUsers()
	Local $foundUser = Null

	For $i = 0 To UBound($aUsers) -1

		Local $curUser = $aUsers[$i]

		If $curUser.item('id') == $oRequest.item('#id') Then
			$foundUser = $curUser


	If Not IsObj($foundUser) Then
		Return _API_RES_NotFound(StringFormat("Could not find user with ID %d", $oRequest.item('#id')))

	return $foundUser


When you visit http://localhost:3000 you are greeted with this pleasent view that will show you all your registred routes and some extra info you have provided.

Doc preview

When you visit http://localhost:3000/users the UDF will return the array of objects as Json

User preview 

And here is an example of http://localhost:3000/users/1

User specified


More examples can be found here


 (NEWEST 2020-09-21)



Autoit-API-WS-1.0.0-beta.zip Autoit-API-WS-1.0.1-beta.zip


Edited by tarretarretarre

Share this post

Link to post
Share on other sites

I have released 1.0.1-beta


  • Empty array/object responses would not serialize properly
  • Empty strings keys would not get serialized propertly


  • The router now lazily accepts appended slashes (example: http:/localhost:4545/route/)


  • Added some lousy tests, see "Testing.au3" for more info

Share this post

Link to post
Share on other sites

I have released 1.0.3-beta


  • Ip adresses were parsed as numbers due to stupid regex check
  • Packet buffer dropped due to logical error
  • CRLF -> LF conversion to not break regex



Edited by tarretarretarre

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By genius257
      This is yet another HTTP server written in AutoIt3.
      Originally based on jvanegmond's POST HTTP Server.
      It is designed to be used either as is, or by scripts for a HTTP communication between any browser and AutoIt3.
      It can run PHP and AutoIt3 CGI, if setup in the settings ini file.
      Github repository
    • By Jahar
      I am new to Autoit, Kindly guide me. I wanted to send a message with HTTP/GET to the URL https://ghsff.it/. How to do so?
    • By nacerbaaziz
      goodmorning autoit team
      today am comming with some winhttp problems, i hope that you can help me to solve them.
      the first problem
      is when opening a request
      my forums api allow me to delete any post using the api key
      all functions work, i mean post / get
      but when i tried to use the delete verb it's gave me an html 404 error
      here is what am tried
      #include "WinHttp.au3" ; Open needed handles Global $hOpen = _WinHttpOpen() Global $hConnect = _WinHttpConnect($hOpen, "xxxxxxxx.com") ; Specify the reguest: Global $hRequest = _WinHttpOpenRequest($hConnect, "Delete", "/vb/Api/posts/10447/?hard_delete=true", default, default) _WinHttpAddRequestHeaders($hRequest, "XF-Api-Key:xxxxx") _WinHttpAddRequestHeaders($hRequest, "XF-Api-User:xxxxx") ; Send request _WinHttpSendRequest($hRequest) ; Wait for the response _WinHttpReceiveResponse($hRequest) Global $sHeader = 0, $sReturned = 0 ; If there is data available... If _WinHttpQueryDataAvailable($hRequest) Then $sHeader = _WinHttpQueryHeaders($hRequest, $WINHTTP_QUERY_CONTENT_DISPOSITION) ;Or maybe: ; $sHeader = _WinHttpQueryHeaders($hRequest, BitOR($WINHTTP_QUERY_RAW_HEADERS_CRLF, $WINHTTP_QUERY_CUSTOM), "Content-Disposition") Do $sReturned &= _WinHttpReadData($hRequest) Until @error msgBox(64, "", $sReturned) endIf ; Close handles _WinHttpCloseHandle($hRequest) _WinHttpCloseHandle($hConnect) _WinHttpCloseHandle($hOpen)  
      and here is the error message
      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /vb/Api/posts/10447/ on this server.<br /> </p> </body></html>  
      i hope you can help me 
      thanks in advance
    • By argumentum
      I can TCP/IP in AutoIt, hence, make a HTTP deamon. Now, how can I HTTPS to use SSL !??
      Well, Apache has this "mod_proxy.so" module that can let me have SSL and what not is in Apache.
      All that is needed is to tell Apache what I wanna do by editing httpd.conf .
      # Implements a proxy/gateway for Apache. # 1. Open /Applications/XAMPP/etc/httpd.conf # 2. Enable the following Modules by removing the # at the front of the line. # - LoadModule rewrite_module modules/mod_rewrite.so # - LoadModule proxy_module modules/mod_proxy.so # - LoadModule proxy_http_module modules/mod_proxy_http.so # # 3. Copy and Paste below to the bottom of httpd.conf # <IfModule mod_proxy.c> ProxyRequests On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyVia Off ProxyPreserveHost Off ProxyPass /home/ ProxyPassReverse /home/ SetEnv proxy-nokeepalive 1 # ..since we are not using "keep-alive", we are using "close" </IfModule> ...et voila  
      I'm using XAMPP ( https://www.apachefriends.org/download.html )
      and this is my solution to avoid coding in PHP, as I feel more comfortable coding in AutoIt.
      A "muli-thread or concurrency" can be done by forking the socket ( https://www.autoitscript.com/forum/topic/199177-fork-udf-ish/ )
      but responses are under 20 ms., so I feel fine with a single thread.
      I modified an example ( attached below ), so can try out the concept.
      PS: I am not an Apache guru. I just discovered this and it opens a world of possibilities. In my case, I'm thinking of an API to query SQLite 
      PS2: I'm not gonna make Poll but do click like if you do  
  • Create New...