Remote procedure calls

I would try and minimize the data to send.
When sending data to the Arduino ( or a web server ) you do not need to use key-value pairs, you can just have keys.

A generic format like this might be good for a flexible system:
GET feature**.function?param1&param2&**param3

So if the 'pump on' function takes a single parameter you can send using get:
GET pump**.on?**10000

You could also send the time in seconds if it is always longer than 999 milliseconds.

In your code, an array can map the string 'pump' to an array of pump functions, and can all be stored in PROGMEM maybe. Then your whole API can be run using a single piece of code (once the array indices have been found ).

A quick check shows that you can store your function addresses in PROGMEM too:

void (*fptr)() PROGMEM = printIt;
void setup() { Serial.begin( 9600 ); }
void printIt() { Serial.println( "running" ); }
void loop(){ ((void(*)()) pgm_read_word( &fptr ))(); }