Если вы следите за моим блогом, вы узнаете, что я написал статью для выполнения HTTP-запросов с Ionic Framework . Так как в последнее время я много играл с React Native , я подумал, что, вероятно, будет хорошей идеей выяснить, как выполнять запросы RESTful HTTP раньше, чем позже, так как теперь у всех есть API-интерфейс.
В документации Facebook для React Native есть (или было на момент написания этой статьи) руководство по получению данных фильмов из удаленного API . Однако вряд ли объяснили, как настроить HTTP-запрос. Фактически, я обнаружил, что во многих интернетах отсутствует четкая документация для запросов RESTful с React.
Эта статья должна прояснить ситуацию!
В дальнейшем я собираюсь предположить, что у вас настроено веб-приложение, которое вы можете использовать в качестве конечных точек API. Неважно, как вы его настроили, пока есть конечная точка GET и конечная точка POST. Мои конечные точки будут возвращать следующие данные:
GET / тест
{
status: "success",
message: "a sample GET request",
search: {{QUERY.search}}
}
В приведенном выше ответе QUERY.search
это параметр, который будет передан в запрос. Ответ просто возвращает переданный параметр запроса.
POST / тест
{
status: "success",
message: "a sample POST request",
body: {
username: {{BODY.username}}
firstname: {{BODY.firstname}}
lastname: {{BODY.lastname}}
}
}
В ответе выше BODY.username
это свойство в теле JSON, которое было передано в запросе. Аналогично с BODY.firstname
и BODY.lastname
свойствами.
Хорошо, теперь, когда API не работает, давайте посмотрим, как поразить эти конечные точки с помощью React Native.
Мы собираемся использовать fetch
функцию. Это может быть лучше понято следующим образом:
fetch("API_ENDPOINT_HERE", {
method: "",
headers: {},
body: ""
})
.then((response) => response.json())
.then((responseData) => {})
.done();
Обратите внимание, что эта body
опция не будет существовать для запросов GET .
Итак, давайте попробуем это с нашими конечными точками API:
fetch("http://www.example.com/test", {method: "POST", body: JSON.stringify({username: "nraboy", firstname: "Nic", lastname: "Raboy"})})
.then((response) => response.json())
.then((responseData) => {
AlertIOS.alert(
"POST Response",
"Response Body -> " + JSON.stringify(responseData.body)
)
})
.done();
Приведенный выше код попадет в нашу конечную точку POST . Это пройдет username
, firstname
и lastname
в теле запроса. Когда ответ получен, он покажет предупреждение, которое выплевывает возвращенный контент, который является только тремя свойствами, возвращенными нам.
Это оставляет нас с конечной точкой GET, которую можно увидеть ниже:
fetch("http://www.example.com/test?search=nraboy", {method: "GET"})
.then((response) => response.json())
.then((responseData) => {
AlertIOS.alert(
"GET Response",
"Search Query -> " + responseData.search
)
})
.done();
В приведенном выше коде есть search
параметр запроса. Конечная точка просто вернет нам это значение, и мы отобразим его как предупреждение. Ничего особенного в этом примере.
Если вы хотите увидеть этот проект в действии, сделайте следующее, если у вас установлен React Native и вы используете Mac. Используя свой Терминал, выполните:
react-native init ReactProject
В своем недавно созданном проекте откройте файл index.ios.js и замените весь код следующим:
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
TouchableHighlight,
AlertIOS,
} = React;
var ReactProject = React.createClass({
_onPressButtonGET: function() {
fetch("http://localhost:3000/test?search=nraboy", {method: "GET"})
.then((response) => response.json())
.then((responseData) => {
AlertIOS.alert(
"GET Response",
"Search Query -> " + responseData.search
)
})
.done();
},
_onPressButtonPOST: function() {
fetch("http://localhost:3000/test", {method: "POST", body: JSON.stringify({username: "nraboy", firstname: "Nic", lastname: "Raboy"})})
.then((response) => response.json())
.then((responseData) => {
AlertIOS.alert(
"POST Response",
"Response Body -> " + JSON.stringify(responseData.body)
)
})
.done();
},
render: function() {
return (
<View style={styles.container}>
<TouchableHighlight onPress={this._onPressButtonGET} style={styles.button}>
<Text>GET</Text>
</TouchableHighlight>
<TouchableHighlight onPress={this._onPressButtonPOST} style={styles.button}>
<Text>POST</Text>
</TouchableHighlight>
</View>
);
},
});
var styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
button: {
backgroundColor: '#eeeeee',
padding: 10,
marginRight: 5,
marginLeft: 5,
}
});
AppRegistry.registerComponent('ReactProject', () => ReactProject);
Не так уж плохо, верно?
Вывод
Несмотря на то, что это непросто понять из-за минимального количества документации, которая появляется в сети, совершать fetch
вызовы на конечных точках RESTful HTTP не сложно в React Native.
Видео-версию этой статьи можно увидеть ниже.