рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдирджреЗрдЦреА рдЕрдирджреЗрдЦреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдзреВрдореНрд░рдкрд╛рди рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ RxJava рдФрд░ Retrofit 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ - рдЖрдк рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдбрд╛рдЯрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрд░рд╛рдорджрд╛рдпрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдХ рд╡реНрд╣рд╛рд░реНрдЯрди рдХрд╛рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж редрдЬрд╛рджреВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдЬреЛ рдУрдбрдЯрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдЙрди рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдерд╛, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛редрдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдкрд░ рдкреНрд░рд▓реЗрдЦрди Odata рд╣реИрдВ Olingo рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕реА # рдореЗрдВ - рд╕реЗ рдЕрдкрд╛рдЪреЗ рдХреЗрд╡рд▓редрдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдУрдбрдЯрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, Microsoft рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ рдФрд░ рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛редрдпрд╣рд╛рдБ рд╡рд┐рдХреА Open_Data_Protocol рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рднрд╛рд╖рд╛ рджреА рдЧрдИ рд╣реИрдбреЗрдЯрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (OData) рдЦреЛрд▓реЗрдВOpen Data Protocol (OData) тАФ - . , HTTP-, XML JSON.
4.0, OData тАФ , OASIS.
рдФрд░ рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдУрдбрдЯрд╛ REST API рдореЗрдВ рдПрдХ рддрд░рд╣ рдХрд╛ SQL рд╣реИ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИредрд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдореЙрдбрд▓ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ - рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдПрдХ рдХрдард┐рди рдХрд╛рдо рд╣реИредрдЬрд┐рд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд╛рдирдХ рдФрд░ рдмрд╛рд░-рдмрд╛рд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдореИрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрд╣реВрдВрдЧрд╛, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЗрди рд▓рд┐рдВрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ - рд╡рд┐рд╖рдп рдкрд░ рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИредрдЕрдм рдЪрд▓реЛ рдЬрд╛рджреВ рдХрд░рддреЗ рд╣реИрдВ:рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВредрд╣рдо рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ 2 рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдХреНрд╡рд╛рдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ редbuild.gradle рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ
implementation 'com.squareup.retrofit2:retrofit:2.7.1'
implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
implementation 'com.squareup.okhttp3:logging-interceptor:4.3.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.7.1'
implementation 'com.squareup.okhttp3:okhttp:4.3.1'
listing 1 рдпреЗ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВред рдореИрдВ рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ 2 рдХреЗрд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдпрд╣рд╛рдБ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореИрдиреБрдЕрд▓ рд╣реИ: рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд░рд┐рдЯреНрд░реЛрдлрд┐рдЯ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ редNetworkService рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ:public class NetworkService {
private static final String TAG = "NetworkService";
private static final NetworkService
mInstance = new NetworkService();
private String mToken;
private Retrofit mRetrofit;
public static NetworkService getInstance() {
return mInstance;
}
private NetworkService() {
RxJava2CallAdapterFactory rxAdapter =
RxJava2CallAdapterFactory
.createWithScheduler(Schedulers.io());
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder okHttpClient =
new OkHttpClient.Builder()
.addInterceptor(interceptor)
.addInterceptor(chain -> {
Request newRequest =
chain.request().newBuilder()
.addHeader("Accept",
"application/json,text/plain,*/*")
.addHeader("Content-Type",
"application/json;odata.metadata=minimal")
.addHeader("Authorization", mToken)
.build();
return chain.proceed(newRequest);
});
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create();
mRetrofit = new Retrofit.Builder()
.baseUrl(Const.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(rxAdapter)
.client(okHttpClient.build())
.build();
}
public ApiService getNetworkClient(){
return mRetrofit.create(ApiService.class);
}
}
listing 2 рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВ:public interface ApiService {
@GET("odata/product")
Observable<List<ProductsDto>> getProducts();
}
listing 3 рдФрд░ рд╣рдо рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддреЗ рд╣реИрдВ:public class ProductsController {
private ApiService mApiService;
private List<ProductsDto> listProducts;
private Gson gson;
public ProductsController() {
mApiService = App.getNetworkService().getNetworkClient();
listProducts = new ArrayList<>();
gson = new Gson();
}
public void productsBtnClick() {
mApiService.getProducts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<List<ProductsDto>>() {
@Override
public void onNext(List<ProductsDto> products) {
listProducts.addAll(listProducts);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
listing 4 рддреЛ, рдкреЙрдбрдХреНрдЯ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рд╕рднреА рдбреЗрдЯрд╛ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ POJO рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИредрдореИрдВ HttpLoggingInterceptor рдореЗрдВ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрд╡рд░реЛрдзрди рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕реНрддрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ - Level.BODYредрд╣рдо рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪреА 4 рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрддреНрддрд░ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рдЧрднрдЧ рд╣реЛрдЧрд╛:
{
"@odata.context":"https://example.xxx/api/odata/$metadata","value":[
{
"name":"product","kind":"EntitySet","url":"product"
},{
"name":"blogs","kind":"EntitySet","url":"blogs"
},{
"name":"posts","kind":"EntitySet","url":"posts"
},{
"name":"comments","kind":"EntitySet","url":"comments"
},{
"name":"rates","kind":"EntitySet","url":"rates"
}
]
}
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдЧреЗ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИредрдпрд╣реА рд╣реИ, рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рд╡рд╕реНрддреБ рд╣реИ, рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╕рдордп рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд░реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдПрдХ рдирдпрд╛ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмреИрд╕рд╛рдЦреА рдХреЛ рдкреЗрдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗредрд╕рд╛рдзрди рдХреЗ рдЖрд░рд╛рдо рдХреЗ рдЪрд░рдореЛрддреНрдХрд░реНрд╖ рдФрд░ рдкрд┐рд▓реНрд▓рд╛ рдЦреБрд╢реА
рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рдкрд▓ рд╕рдЪ рд╣реИ, рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ 2 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╢рдХреНрддрд┐, рд╢рдХреНрддрд┐ рдФрд░ рд╕рд╛рджрдЧреА ред рдЕрдм рдЖрдк рдУрдбрдЯрд╛ рд╕реЗрд╡рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :
@GET("odata/product?$filter=Id eq 111&$expand=dateReading($orderby=Date desc")
Observable<List<ProductsDto>> getProducts();
// properties blogs
@GET("odata/blogs?$orderby=Date desc")
Observable<List<BlogsDto>> getBlogs();
//
@GET("odata/product?$filter=((Id eq 19) and (Name eq 'Available')) and ((Status eq 'OPEN') or ((Status eq 'CLOSED') and (Date ge 2020-02-13T06:39:48Z)))&$orderby=Status asc,Date desc&$top=10&$expand=AuthorId,CategoryId($expand=weight)&$count=true")
Observable<List<ProductsDto>> getProducts();
// ,
// .
// :
@GET
Observable<List<ProductsDto>> getProducts(@Url String url);
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6рдпрд╣рд╛рдБ рдпрд╣ рд╕рд┐рд▓реБрд╢реНрдХрд╛ рд╡реАрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ 2 рд╣реИ ред рдбрд╛рдпрдиреЗрдорд┐рдХ Url рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЗрд╕ рд╕рднреА рджреНрд░рд╡реНрдпрдорд╛рди рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХреЛрдб рдореЗрдВ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдХрд▓реНрдкрдирд╛ рд╣реИредрдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:private void buttonGetProduct() {
String one = "odata/product?$filter=Id eq ";
String id = "777";
String tree = "&$expand=dateReading($orderby=Date desc)";
String url = one + id + tree;
mApiService.getProduct(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableObserver<List<ProductDto>>() {
@Override
public void onNext(List<ProductDto> products) {
mProductsDto.addAll(countersDtos);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
listing 7 рд╕рд╛рд░рд╛рдВрд╢
рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рдЕрдиреБрднрд╡ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддрд╛ рд╣реВрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдпрд╣ рд▓реЗрдЦ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣рдЯрд╛ рджреЗрдЧрд╛редрд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд░реЗрдЯреНрд░реЛрдлрд┐рдЯ 2 рдФрд░ рдУрдбрд╛рдЯрд╛ рдкрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдЧрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рддреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рд▓рд┐рдВрдХ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛редрдореИрдВ рдХреЛрдб рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЙрддреНрдкрд╛рдж рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╣реИредрдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд┐рдВрдХ:тЖТ Microsoft рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг: рдбреЗрдЯрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЦреЛрд▓реЗрдВтЖТ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ OData 4.0 рдЬрд╛рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реАтЖТ рдУрдкрди рдбреЗрдЯрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ