Gemini input validation errors

Michael Lazar lazar.michael22 at gmail.com
Fri Jan 29 03:17:18 GMT 2021
Hi all,

Piggybacking on the recent threads about forms in gemini, how should
we be handling errors with input validation? I've run into this
problem a few times already with astrobotany and I haven't found a
great solution for it yet.

REQUEST  : gemini://example.com/page/input
RESPONSE : 10 Enter a choice [yes/no]
REQUEST  : gemini://example.com/page/input?potato
RESPONSE : ???

---

Option 1.

Return a proper error response code.

REQUEST  : gemini://example.com/page/input?potato
RESPONSE : 59 Invalid choice (potato)

Pros
- Feels like the semantically correct thing to do.

Cons
- Many gemini clients don't display the human readable meta along
  the error codes (For consistency, I guess?). This results in a
  terribly confusing user experience.

---

Option 2.

Return a new input prompt with the error message included.

REQUEST  : gemini://example.com/page/input?potato
RESPONSE : 10 Invalid choice (potato). Enter a choice [yes/no]

Pros
- Convenient for the user.
- The UI is reasonably clean.

Cons
- It can get ugly really quickly with longer error messages being
  concatenated on the same line as the original prompt.

---

Option 3.

Return a successful response with the error as plain text.

REQUEST  : gemini://example.com/page/input?potato
RESPONSE : 20 text/gemini
           Invalid option (potato).

Pros
- Will always display the error message to the user.

Cons
- No semantic indication that there was an error.
- Can screw up browser history.

---

I know it's blasphemy but a new error code could be really nice here.
Something like

54 INVALID INPUT
Indicates that the query string contained a value that was not
accepted by the server. The <meta> should be a human-readable
error message that will be shown to the user. Sophisticated clients
can display the error message along with re-prompting the user with
the same input from the previous request.

Any thoughts or other ideas?

- Michael


Archive home | About this archive