Въведение
Докато подготвях тази статия, се сблъсках с грешни отговори от сървъра. По всичко личеше, че данните, които изпращам към ThingSpeak са грешни. Нека се опитаме да разберем, къде точно е проблема.
За да направим това ще ползваме програмата Postman, която ни позволява лесно да направим заявка към сървъра и да получим отговор. Това можем да направим и директно в кода на борда, но с програмата е доста по-лесно и по-бързо. Това ще ни спести доста време. Но нека първо да видим какво представлява Postman.
Какво е Postman
Postman е мощен инструмент за разработка и тестване на API (Application Programming Interface). Ето обобщение на някои от ключовите характеристики и предимства на Postman:
- Лесен за използване интерфейс: Postman предлага потребителско приятен и интуитивен интерфейс. Неговата добре структурирана и лесно навигираща среда прави тестването и разработването на API забележително по-удобно.
- Създаване на заявки (Requests): Позволява бързо и лесно създаване на HTTP заявки с различни методи (GET, POST, PUT, DELETE и др.), добавяне на параметри, хедъри и тяло на заявката.
- Колекции: Postman позволява организирането на заявките в колекции, което е удобно за групиране на заявките по проекти и тяхното споделяне с екипа.
- Автоматизация и тестове: Интегрира възможности за създаване на автоматизирани тестове с помощта на JavaScript, което улеснява проверката на отговорите на API.
- Средства за сътрудничество: Postman предлага функционалности за сътрудничество в екипа, включително споделяне на колекции, обмен на заявки и коментари.
- Генериране на документация: Можете да генерирате автоматична документация за вашите API, която е полезна за комуникацията с други разработчици.
- Работа с различни формати: Postman поддържа работа с различни формати на данните като JSON и XML, като предоставя възможност за лесно превръщане и обработка на данни.
- Разширяемост: С постоянните актуализации и добавяне на нови функции, Postman предоставя възможности за интеграция с различни инструменти и услуги.
Общо взето, Postman е силен инструмент, който улеснява процеса на разработка, тестване и документиране на API. Неговата функционалност го прави незаменим инструмент за разработчици, тестери и всички, занимаващи се с работа с API.
Инсталация
Може да инсталираме Postman от тук. При опциите за инсталация, инсталирайте „лекият клиент“ без нужда от регистрация. За този пример не ни е нужна. Без регистрация не може да се ползва функцията за колекции. Ето така изглежда инсталационният екран:

При натискане на линка веднага ни се отваря клиента. Но нека да видим къде точно е проблма и защо искаме да използваме тази програма.
Проблема
Получаваме грешка при реда, в който се опитваме да прочетем стойностите от сървъра на ThingSpeak. Този код би трябвало да ни върне последните две стойности на променливата, която сме изпратили.
String readRequest = "GET /channels/" + channelID + "/fields/" + fieldNumber +
".json?api_key=" + writeApiKey + "?results=" + numberOfResults + " HTTP/1.1\r\n"
+ "Host: " + host + "\r\n" + "Connection: close\r\n\r\n";
Ако замените линията код в кода на статията, ще получите следният отговор:
HTTP/1.1 400 Bad Request
Date: Sat, 25 Nov 2023 14:23:22 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Status: 400 Bad Request
Cache-Control: no-cache
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Request-Id: 04f74c1d-f9f5-49ea-bf60-608dc10ed62c
Access-Control-Allow-Headers: origin, content-type, X-Requested-With
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
X-Frame-Options: SAMEORIGIN
2
-1
0
Closing connection
Грешката „400 Bad Request“ показва, че пращаме на сървъра нещо грешно. Повече за различните HTTP отговори можем да прочетем тук. Описанието на грешката е – „400 Bad Request – Сървърът не може или не иска да обработи заявката поради нещо, което се възприема като грешка на клиента (напр. неправилно оформен синтаксис на заявката, невалидно оформяне на съобщението за заявка или измамно маршрутизиране на заявката).“
Нека да използваме Postman, за да изпратим заявката и да видим какво ще стане. За целта са ни нужни ключовете за достъп към ThingSpeak. Тези можем да вземем, като се логнем в страницата и отидем на канала, от когото искаме да четем.

Нека сега да пренапишем заявката в за нас удобен вид:
https://api.thingspeak.com/channels/23*****/fields/1.json?api_key=E5**************&results=2
Нека я изпълним в Postman


В отговора получаваме доста сходни хедъри и боди като грешката от борда.
Но нека се загледаме в страницата на ThingSpeak. Там е описана правилната заявка, която е:
https://api.thingspeak.com/channels/23*****/fields/1.json?api_key=E5**************&results=2
нека да я повторим в Postman:

Сега заявката връща правилният отговор.
Нека да заместим грешният с правилен код.
String readRequest = "GET /channels/" + channelID + "/fields/" + fieldNumber +
".json?api_key=" + writeApiKey + "&results=" + numberOfResults + " HTTP/1.1\r\n"
+ "Host: " + host + "\r\n" + "Connection: close\r\n\r\n";
И да пуснем кода на борда. Ако отворим серийната конзола получаваме:
HTTP/1.1 200 OK
Date: Tue, 28 Nov 2023 20:47:05 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Status: 200 OK
Cache-Control: max-age=7, private
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Request-Id: eac505f1-4a2a-45f6-9ed3-f6f4f6d726ed
Access-Control-Allow-Headers: origin, content-type, X-Requested-With
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
ETag: W/"47c716b9756448dc96ac69cf9445b49d"
X-Frame-Options: SAMEORIGIN
1c6
{"channel":{"id":23*****,"name":"ThingSpeak","description":"ThingSpeak demo channel","latitude":"0.0","longitude":"0.0","field1":"Internal temp","created_at":"2023-11-18T14:20:41Z","updated_at":"2023-11-18T14:20:41Z","last_entry_id":77},"feeds":[{"created_at":"2023-11-25T14:35:44Z","entry_id":75,"field1":"39.91"},{"created_at":"2023-11-28T20:46:46Z","entry_id":76,"field1":"43.86"},{"created_at":"2023-11-28T20:47:03Z","entry_id":77,"field1":"40.35"}]}
0
Което е правилният отговор, който ни трябваше.
Заключение
Както виждате дебъгването с Postman става бързо и лесно. Тази програма може да ви спести много време при търсенето на грешки или бързото имплементиране на уеб заявки, без да качвате кода на борд или да го емулирате. В интернет могат да се намерят множество статии, които опиват процеса по-подробно и показват повече детайли за програмата. Като цяло Postman е поредният инструмент, който може да ни помогне по-бързо да стигнем до желания резултат.
Весело програмиране!
Hey people!!!!!
Good mood and good luck to everyone!!!!!